使用JavaScript在Dash.js中前进到下一个视频

时间:2015-10-27 06:41:36

标签: javascript xmlhttprequest video-streaming dash.js

我在Wowza Streaming Engine论坛上找到了一个解决方法,该论坛展示了如何使用JavaScript推进到文件路径列表中的下一个视频,以便与m3u8播放列表一起使用,该播放列表使用我适用于我的Rails视图的方法:< / p>

<script>
    <% string = "" %>
    <% request = HTTParty.get("http://localhost:4567/playlist") %>
    <% playlist = JSON.parse(request.body) %>
    <% vids = playlist.each do |vid| %>
    <% if vid['id'] %>

        <% string = string + "" + vid['filename'] +"," %>

    <% end %>
    <% end %>

var videos="<%= string %>".split(",");
next=-1;    
    function end(e)
    {
    var video = document.getElementById("video1");

    if (++next==videos.length)
        return;

    <% if browser.safari? or browser.ios? %>
    video.src = "http://IP:1935/"+videos[next]+"/playlist.m3u8";
    <% elsif browser.chrome? %>
    video.src = "http://IP:1935/"+videos[next]+"/manifest.mpd";
    <% end %>
    video.load();
    video.play();
    }
</script>

它可以在Safari和iOS设备上与m3u8一起使用,并且直到Chrome上的某个点为止,它使用Dash.js作为播放器:

               <video class="dashjs-player" preload="true" width="100%" height="auto" controls autoplay onended="end(event)" id="video1" src="http://IP:1935/vod/mp4:Sample.mp4/manifest.mpd" type="application/dash+xml" >

               </video>

Javascript应该前进到列表中的下一个文件,但它在我的控制台中收到此错误:

[video] start 
dash.all.js:11 [audio] start 
dash.all.js:11 Video Element Error: MEDIA_ERR_SRC_NOT_SUPPORTED 
dash.all.js:11 [video] stop 
dash.all.js:11 [audio] stop 
dash.all.js:11 Video Element Error: MEDIA_ERR_SRC_NOT_SUPPORTED 

没有其他细节。在控制台的“网络”选项卡中,我发现它确实是连接,并且在播放器中设置了正确的(可解析的和有效的)URL,但是,与第一个清单不同,它显示了“媒体”类型而不是比“xhr”和发起者来自我的应用程序,而不是Dash.js:

of type "media" from index rather than XML request via dash.js

所以,基本上,我的问题是我在哪里开始更改我的请求方法以强制dash.js进行调用和/或使我当前的请求(来自我页面头部的Javascript)做一个正确的XHR,这是可能是我可以收集哪些数据的阻塞点?

1 个答案:

答案 0 :(得分:1)

我认为您遇到的问题是dash.js无法通过将视频的src元素设置为mpd文件来实现。相反,你必须初始化dash.js播放器并将其指向Video元素。

您可以查看Getting Started section of the dash.js Readme。 Dash.js使用Media Source Extensions播放视频,以便它可以执行必要的解密和比特率切换。这意味着video.src属性设置为一个特殊的blob URL,您不会在服务器端知道它。

tl; dr;版本是你需要运行这样的代码:

(function(){
            var url = "http://dash.edgesuite.net/envivio/Envivio-dash2/manifest.mpd";
            var player = MediaPlayer().create(); 
            player.initialize(document.querySelector(".dashjs-player"), url, true);
        })();

您还应该注意,Dash.js应该适用于桌面版Safari。