我正在构建一个a/v html5流媒体Web应用程序。这个问题与项目的音频部分有关,但是我确定当我开始使用视频部分时,我也会遇到类似的情况。我的目标设备是iPad的 Safari 浏览器(因此为什么我必须执行此html5)。播放效果很好,但是我有一个加载栏,需要反射(reflect)出已加载了多少轨道。遵循w3规范,我尝试使用jQuery通过以下方式实现此目的:

var that = this;
that.player = $('audio')[0];

$('that.player').bind('progress',function(){
    var buffer = that.player.buffered.end(0)
    that.updateLoadBuffer(buffer);
});

这没有用。 'that.player.buffered'返回一个TimeRanges对象,并且TimeRanges具有方法'end(index)',该方法返回以秒为单位的'index'指定的TimeRange的缓冲区末尾的播放位置。 TimeRanges还具有.length属性,该属性告诉您该对象封装了多少TimeRanges。当我尝试记录该属性时,我发现TimeRanges.length = 0,这意味着不会传回任何TimeRanges。另外,当我将记录语句放入绑定(bind)函数中时,我发现'progress'事件从未触发过。对于具有类似格式的'loadedmetata'和'timeupdate'事件,我具有单独的功能,并且会按预期启动。我尝试了其他方法来捕获事件,但无济于事:
that.player.onprogress = function(e){
     console.log('progressEvent heard');
};

that.player.addEventListener('progress',progressHandler, false)
function progressHandler(e){
    console.log('progressEvent heard');
};

这些都不触发我的控制台消息。我的音频标签声明如下:
<audio style="width:0;height:0;"></audio>

我在这里做错了什么?

更新:我正在使用wowzamediaserver来处理http流。我不知道这是否与它有关。

另一个更新:我意识到我的音频标签中没有源,这是因为我使用jquery动态设置了它,如下所示:
$('audio').attr('src','http://my.wowza.server:1935/myStreamingApp/_definst_/mp3:path/to/my/track/audio.mp3/playlist.m3u8');

再次,我没有播放问题,所以这与我的问题无关,但我只想给大家提供尽可能清晰的图片。

最佳答案

HTML5规范仍在开发中,因此支持它的浏览器实质上符合尚未定稿的规范。因此,我不希望他们的HTML5功能能够完全正常工作...

10-06 15:13