3

问题:

为了让 iOS 应用能够将视频流式传输到应用商店,我们需要一个 HLS 版本。

有什么问题?

Android 对 HLS 支持不好,由于其他原因,我们需要存储相同内容的 MP4 和 HLS 文件。

MP4 和 HLS 有什么区别,为什么需要同时存储两者?

MP4 是一个存储 H.264 视频和 AAC 音频的容器,以便在 HTML 5 浏览器中实现最佳兼容性——如果浏览器不支持使用相同 MP4 文件但通过 flash 播放的 HTML 5 中的 MP4 视频,jsvideo 播放器通常会有 flash 回退。

HLS 是一种协议,其中文本文件 (.m3u8) 包含对播放列表的引用,播放列表本身引用 .ts 文件 (或 m2ts),它们是 mpeg-2 传输流,不要与 mpeg-2 视频混淆。.ts 文件是相同 H.264 视频和 AAC 音频的容器。

我为什么抱怨?

  1. 从 MP4 文件创建 HLS 文件和播放列表需要时间

  2. (最重要的是)我们现在在 S3 上存储了两倍的数据

  3. 我为什么要在乎?如果您存储 MP4 和 HLS 的 S3 账单是每月 1 万美元,那么现在只需 5 千美元。或者换一种说法,如果您为在 MP4 中存储数据支付 10 万美元,那么在 MP4 和 HLS 中存储相同的内容将花费 20 万美元。

    我想要什么?

我只想存储 .ts 文件,并使用该文件同时为桌面用户、iOS 用户和 Android 用户提供服务。

可能吗?

HLS 不需要 5-10 秒的 .ts 段而不是一个大文件吗?

从 IETF 草案 7 和协议版本 4 开始,HLS 支持标签 EXT-X-BYTERANGE,它允许您将媒体段指定为较大 URL 的字节范围(子范围)。

.ts 文件是否与 HTML5 视频兼容?

显然不是。它们是与 MP4 不同的容器,但包含相同的视频和音频内容。值得研究如何一次存储原始视频/音频数据,并在必要时简单地使用正确的容器。如果 JS 视频播放器可以在浏览器不支持 HTML 5 MP4 的情况下即时将 HTML 5 MP4 文件转换为 Flash 视频,那么为什么不能对 M2TS 数据做同样的事情呢?

我可能在某种程度上是无知的,但也许有人可以对这个问题有所了解,并可能提出解决方案。

4

1 回答 1

6

目前没有好的解决方案。

一点背景。

视频流过去需要自定义协议,例如 RTP/RTMP/RTSP 等。这些协议工作正常,除了我们基本上构建了两个独立的网络。一种基于 HTTP 用于标准 Web 流量,另一种基于 HTTP。出现了将视频分割成小块并通过 HTTP 将它们提供给播放器的想法。这样我们就不需要特殊的服务器/软件,我们可以利用正在构建的巨型 HTTP CDN。此外。因为视频被分割成块,我们可以将相同的视频编码成不同的质量/文件大小。然后播放器可以为其当前带宽选择质量最好的视频。由于网络条件不断变化,这是移动设备的完美解决方案。开发了几个相互竞争的标准。移动网络是第一个推向市场的[需要引用]。该设计被 Microsoft(Smooth Streaming)和 Apple(HTTP Live streaming aka HLS)复制。微软正在逐步淘汰流畅的流媒体,转而支持 DASH。DASH 看起来将成为未来的默认流媒体解决方案。除了,由于其按礼让设计的方法,它基本上已经在礼让中停留了几年。现在,在那几年里,苹果卖出了数百万台 IOS 设备。所以HLS不能只是停产。为什么不是每个人都只使用 HLS 呢?我可以想到三个原因 1)它的苹果标准,人们是仇恨者。2) 传输流是一种复杂的文件格式。3) 传输流受专利保护。MP4 没有专利保护,但它也没有自适应能力。这使得用户在 2G 网络上的体验很差。iPhone 1 支持的唯一网络。还有 AT& 当时的 T 不希望在蜂窝网络上传输完整的比特率视频,这可悲的是蜂窝网络不足。HLS 是妥协。所有这些都早于 HTML5。所以在设计中甚至没有考虑视频标签。

解决你的观点:

1) 从 MP4 文件创建 HLS 文件和播放列表需要时间

这是一个编程网站,自动化它。

2) 我们现在在 S3 上存储两倍的数据 [原文如此] 我只想存储 .ts 文件,并使用该文件同时为桌面用户、iOS 用户和 Android 用户提供服务。

你和我都是男人:)。

可能的解决方案。

1) Android 的实现有什么特别的问题?(除了在旧设备中缺少)

2)JW播放器可以播放HLS(不确定在android上)

3) 按需服务器端transmux。

HLS 不需要 5-10 秒的 .ts 段而不是一个大文件吗?

你可以做字节范围,但你需要确保你感兴趣的所有设备都支持它。

如果 JS 视频播放器可以在浏览器不支持 HTML 5 MP4 的情况下即时将 HTML 5 MP4 文件转换为 Flash 视频,那么为什么不能对 M2TS 数据做同样的事情呢?

他们不转换。Flash 原生支持 mp4。可以在 AS3/JS 中转换 TS。我已经做了。JW播放器可以在浏览器中转换TS。video.js 也可以。

于 2013-09-25T00:09:24.957 回答