HTML5和MP4与M2TS容器

ege*_*ter 3 video html5 http-live-streaming ios mpeg2-ts

问题:

要获得将视频接收到应用商店的iOS应用,我们需要拥有HLS版本.

有什么问题?

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

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

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

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

我为什么抱怨?

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

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

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

    我想要什么?

我只想存储.ts文件,并为该单个文件提供桌面用户,iOS用户和Android用户.

可能吗?

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

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

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

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

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

sza*_*ary 6

目前没有好的解决方案.

一点背景.

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

解决你的观点:

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

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

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

你和我都是男人:).

可能的解决方案.

1)机器人实施有什么特别的错误?(旧设备缺少除外)

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

3)服务器端transmux按需.

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

您可以执行字节范围,但您需要确保您感兴趣的所有设备都支持它.

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

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