编辑3:从IOS 10开始,HLS将支持分段的mp4文件。现在的答案是创建带有DASH和HLS清单的分段mp4资产。>假装Flash,iOS9及以下版本和IE 10及以下版本不存在。
此行下方的所有内容均已过时。保留在这里供后代使用。
编辑2:正如评论中的人指出的那样,事情发生了变化。几乎所有浏览器都将支持AVC/AAC编解码器。iOS仍然需要HLS。但是,通过hls.js之类的适配器,您可以在MSE中播放HLS。如果需要iOS,新的答案是HLS + hls.js。或只是碎片化的MP4(即DASH)(如果您不这样做)
视频(尤其是实况视频)非常困难的原因有很多。(请注意,最初的问题指定了HTML5视频是必需的,但提问者在评论中表示可以使用Flash。因此,此问题立即引起误解)
首先,我要重申一下:在 HTML5上没有实时支持的官方支持 。有一些技巧,但是您的里程可能会有所不同。
编辑:自从我写了这个答案以来,媒体源扩展已经成熟,现在已经接近成为可行的选择。大多数主流浏览器都支持它们。iOS仍然是一个障碍。
接下来,您需要了解视频点播(VOD)和实时视频是完全不同的。是的,它们都是视频,但是问题不同,因此格式也不同。例如,如果计算机中的时钟运行速度比应有的速度快1%,则您不会注意到VOD。使用实时视频,您将尝试在视频发生之前进行播放。如果要加入正在进行的实时视频流,则需要初始化解码器所需的数据,因此必须在流中重复该数据或将其发送出去。使用VOD,您可以阅读他们希望找到的文件的开头。
现在让我们深入探讨。
平台:
- iOS
- PC
- MAC
- Android
编解码器:
- vp8 / 9
- h.264
- thora(vp3)
浏览器中直播视频的常见交付方式:
- DASH(HTTP)
- HLS(HTTP)
- flash(RTMP)
- flash(HDS)
浏览器中VOD的常见投放方式:
- DASH(HTTP Streaming)
- HLS(HTTP Streaming)
- 快闪(RTMP)
- flash(HTTP Streaming)
- MP4(HTTP伪 pseudo streaming)
- 我不会谈论MKV和OOG,因为我不太了解它们。
html5视频标签:
- MP4
- Webm
- ogg
让我们看看哪些浏览器支持什么格式
Safari:
- HLS(仅iOS和Mac)
- h.264
- MP4
Firefox
- DASH(通过MSE,但没有h.264)
- h.264仅通过Flash!
- VP9
- MP4
- OGG
- Webm
IE
- Flash
- DASH(仅通过MSE IE 11+)
- h.264
- MP4
Chrome
- 闪
- DASH(via MSE)
- h.264
- VP9
- MP4
- Webm
- ogg
MP4不能用于实时视频(注意:DASH是MP4的超集,因此请不要对此感到困惑)。MP4分为两部分:moov和mdat。mdat包含原始音频视频数据。但是它没有被索引,因此没有moov,它是无用的。moov包含mdat中所有数据的索引。但是由于其格式,在知道每个帧的时间戳和大小之前,无法将其“展平”。可能有可能构建一个“使帧大小变小”的模型,但在带宽方面却非常浪费。
因此,如果您想在任何地方交付,我们需要找到最小公分母。您将看到这里没有LCD而不使用Flash示例:
- iOS仅支持h.264视频。并且仅支持HLS直播。
- Firefox根本不支持h.264,除非您使用Flash
- Flash无法在iOS中使用
最接近LCD的是使用HLS来吸引您的iOS用户,并为其他所有人闪烁。我个人最喜欢的是对HLS进行编码,然后使用Flash为其他所有人播放HLS。您可以通过JW播放器6在Flash中播放HLS(或像我一样将自己的HLS写入AS3中的FLV)
很快,最常见的方式将是在iOS/Mac上使用HLS,并在其他任何地方通过MSE通过DASH(这是Netflix即将采取的措施)。但是我们仍在等待所有人升级他们的浏览器。您可能还需要为Firefox使用单独的DASH/VP9(我知道open264;它很烂。它不能以主要或高姿态播放视频。因此,它目前无用)。



