【发布时间】:2016-05-16 07:25:32
【问题描述】:
我正在研究一个星期,以找到一种简单且独立于平台的方法,可以将 mp4 文件流式传输到任何浏览器。如果浏览器不兼容,将使用渐进式流(直接下载)方法。我的场景是这样的:
- 单个 mp4 文件(未分段和多路复用(音频+视频))
- 支持 HTTP 字节范围服务
- 在浏览器不兼容的情况下支持渐进式流(直接文件下载)
在研究了 Apple HLS、Adobe Flash Stream、Microsoft Smooth、RTSP 和 MPEG-DASH 之后,似乎 MPEG-DASH 是正确的解决方案。但问题是 MPEG-DASH 迫使我将 mp4 文件拆分为单独的分段文件,这导致 duplicate 消耗空间来存储 mp4 文件,因为在浏览器不兼容的情况下我必须支持渐进式流。然后将单个 mp4 文件与分段 mp4 文件存储是不可避免的。
问题是:有没有办法将单个 mp4 文件作为http 流 和渐进式流 在任何浏览器中?
MPEG-DASH 协议说它支持多路复用文件,但问题是dash.js 不支持它。是否有任何其他 javascript 播放器支持具有字节范围请求的多路复用和单个 mp4 文件?
欢迎任何其他符合我的场景条件的解决方案。 谢谢。
【问题讨论】:
-
我认为所有主流浏览器都支持mp4。 http://caniuse.com/#feat=mpeg4。您可以只使用一个好的旧 http 服务器来流式传输它。只有当您需要自适应比特率流、多语言、drm 等花哨的东西时,才需要 MPEG-DASH。我不完全理解你的问题。如果您坚持使用 MPEG-DASH,您可以简单地使用服务器端的 mp4box 对您的 mp4 文件进行分段(您只需执行一次)。结果不是多个 mp4 文件,而是以更适合流式传输的方式组织的单个 mp4 文件。
-
@SvetlinMladenov 谢谢。我的主要问题是
Default Android Browsers。我已经测试了超过 4 种不同的 JS 播放器。他们都没有正确播放 mp4 文件。 mp4 视频只有在全屏状态才能正常播放。 -
@SvetlinMladenov 我使用
HandBrake编码MP4 文件web optimized & 2-pass encoding。只有在这种情况下,Android 浏览器和 Chrome 才会播放 MP4 视频。但问题是它只能在 全屏 状态下工作。参考:broken-links.com/2010/07/08/… -
@SvetlinMladenov 请发表您的评论作为答案。我愿意接受!
-
@SvetlinMladenov 我已经使用这篇文章解决了 Android 中的视频播放问题:stackoverflow.com/a/24403519/365229
标签: javascript http video-streaming mpeg-dash dash.js