ios - HTML5 和 MP4 与 M2TS 容器

标签 ios html video http-live-streaming mpeg2-ts

问题:

要让 iOS 应用能够流式传输视频并进入应用商店,我们需要有 HLS 版本。

有什么问题?

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

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

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

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

我为什么要提示?

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

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

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

    我想要什么?

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

这可能吗?

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

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

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

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

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

最佳答案

目前没有好的解决方案。

一点背景。

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

解决你的观点:

1) It takes time to create the HLS files and playlists from the MP4 files

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

2) We are now storing twice as much data on S3 [sic] I want to store only the .ts files and serve both desktop users, iOS users, and Android users with that single file.

你和我都是男人 :)。

可能的解决方案。

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

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

3) 服务器端按需传输。

Doesn’t HLS require 5-10 second .ts segments instead of one big file?

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

If JS video players can convert HTML 5 MP4 files into Flash video on the fly if the browser does not support HTML 5 MP4, then why not be able to do the same with M2TS data?

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

关于ios - HTML5 和 MP4 与 M2TS 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18993266/

相关文章:

ios - 如何快速设置 CAShapeLayer 的 strokeColor

html - Youtube 视频 5*5 马赛克与 CSS?

html - 相同长度字符的像素差异

ios - 标签文本有多种字体、样式和颜色

ios - 如何在 cellEdit 之后强制从持久存储中重新加载核心数据

ios - 如何将整个句子中的某个单词定义为变量?

php - 每行显示两个 td

javascript - 显示不支持的文件格式的 <video> 后备消息?

java - 如何用java android jdk播放外部视频?

video - 如何从我的家庭电影文件::AVI 和 MPG4 中获取原始捕获时间戳?