我正在开发一个可以流式传输 .m3u8 播放列表(HLS 播放)中的音频流的项目。我正在使用 videojs 来实现上述目的。 当我使用 .m3u8 和 (.ts) 格式的视频时,一切都很顺利。这些流媒体在所有主要浏览器中播放。 代码如下:
<script src="video.js"></script>
<script src="videojs.hls.min.js"></script>
<script>
//myPlayer is my object for videosjs
myPlayer.src({
type: "application/x-mpegURL",
src:"a_valid_HLS_stream.m3u8"
});
myPlayer.play();
</script>
和 html
<video id="myvideo"></video>
此代码对于包含 .ts
视频流位的 HLS 运行良好。
现在,我的流提供程序已通过向我提供包含 .aac
格式的音频文件 block 的 .m3u8
流来更改 HLS 流。
所以现在苹果设备中除了safari之外的所有浏览器都可以播放这样的流。
嗯,我知道 HLS 本身就支持 HLS 播放,但因为 videojs 是为那些原生不支持 HLS 的人准备的。
虽然我对代码做了一些更改,如下所示
<script>
//myPlayer is my object for videosjs
myPlayer.src({
type: "application/x-mpegURL; audio/x-aac",
src:"another_valid_HLS_stream.m3u8"
});
myPlayer.play();
</script>
在 html 页面中
<audio id="myvideo"></audio>
我还尝试将 src 类型更改为 application/vnd.apple.mpegurl
,它实际上是在 .m3u8
流的 header 中设置的,但也没有运气。
任何帮助将不胜感激。
最佳答案
问题不在于客户端配置,而在于媒体容器。以 .ts
结尾的资源包含 MPEG-TS 内的媒体(音频/视频)流。容器。 .aac
中的资源编辑包含 ADTS 内的单个音频流。容器。 videojs-contrib-hls不支持ADTS并且客户端配置无关。
使用 ADTS 代替 MPEG-TS 可以减少几个百分点的开销。这可能就是您的提供商转而使用它的原因。
恕我直言,您现在最好的选择是联系您的提供商并要求他提供 MPEG-TS 流而不是 ADTS 流。
或者,您可以向 videojs-contrib-hls 的开发人员报告此问题看看他们是否有兴趣实现这个案例。
您的第三个选择是放弃 videojs-contrib-hls 并支付提供此功能的商业解决方案的费用。 Viblast Player是我有经验的解决方案。您可以查看播放 ADTS 流的示例 here .
关于angularjs - 我想通过视频js流式传输.m3u8格式的音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35357856/