近日在和朋友聊起媒体流的服务器端实时转码技术的时候,发现苹果的各种终端上的视频播放并未使用常见的基于UDP的RTSP/RTP,而强制使用了Http Live Stream技术,这里稍稍总结了如下。

苹果的视频数据流播放技术要求

一如苹果的强势作风,苹果对其旗下的iPhone、iPod、iPad、Apple TV各种设备上的视频数据播放有强制的技术限制。首先,说说音视频数据的数据压缩格式要求。

1.必须使用H.264的编码压缩格式。iPhone 3G或者更新版本、iPod touch 第二代或者更新的版本可以选择支持H.264 Baseline 3.1 ,为了兼容这些设备的旧版本,则需要支持H.264 Baseline 3.0。对iPad,Apple TV 2 或者更新的版本,可以选择使用Baseline profile 3.0,Baseline profile 3.1或者是Main profile 3.1。其选择原则可以总结为:大屏幕的视频数据使用Main Profile3.1;小屏幕的视频数据使用Baseline profile 3.1,为了兼容旧版本的平台,需要同时支持Baseline Profile的3.0版本。

2.音频编码压缩格式

HE-AAC/AAC-LC,stereo或者是MP3(MPEG-1 Audio Layer 3),stereo。

其次,说说视频流播放技术要求

1.视频流时长超过十分钟或者视频流五分钟内数据流量超过5MB需要强制使用Http Live Stream技术方案。

2.如果应用在无线蜂窝网络(2g/3g等网络)中使用Http Live Stream,至少需要提供一个在64kbps或者更低带宽下的视频数据流(例如,提供一个版本只保留声音与静态图片)。

3.不满足要求的软件将被下架。

可以说,Http Live Stream技术(下文简称为HLS)是苹果视频播放方案的核心。

什么是HLS

维基百科把HLS定义为苹果公司实现的一种完全基于HTTP的媒体流协议。要理解HLS,先看看HLS的典型组网结构。在苹果公司的技术文档描述中HLS组网由三部分组成,后台服务器端Server 、分发模块Distribution 、以及客户端Client。

后端Server生成用于最终用于传输的媒体数据,原始的语音视频数据(例如H.264的视频和AAC的音频)被打包成MPEG-2的传输数据流(MPEG transport stream,由于定义在MPEG-2规范的第一部分,又叫做MPEG-2 transport stream)。MPEG-2的传输数据流被分割成一块一块,例如,每一块存储在一个后缀为ts的媒体文件中。

与此同时,生成一个对应的文件后缀为m3u8的索引文件。

媒体流索引文件与对应的一系列媒体文件存放在分发模块Distribution 中,分发模块Distribution是一个标准的Web 服务器,通过标准的HTTP访问,客户端Client可以获取到媒体流的索引文件,并通过索引文件逐个获取媒体流的分块ts文件。客户端Client据此可以拼接出完整的视频流,显示给最终的用户。相对于其他移动平台上使用的基于UDP协议的RTSP媒体数据流播放方案,分发模块Distribution仅仅使用HTTP连接传输所有的数据,使其多媒体数据流能够最广泛的穿越各种边缘网络的网关、路由器、网络代理设备。此外,分发模块Distribution可以和各种数字内容分发的前端机器合作,提供缓存、媒体数据的分布式存储等。

索引文件的一个典型例子:

这里总结一下支持HLS的非PC客户端,苹果公司所出的所有设备,包括iPhone、iPad、iPod、Apple TV均内置支持HLS,并且只支持HLS(不支持其他平台使用的RTSP媒体数据流)。Google的Android 3.0以后的版本也支持HLS。

在网页中访问HLS视频数据流代码如下:

下面以苹果平台上的多媒体“实时”转码功能软件airplay video软件为实例,对HLS多媒体数据流进行抓包分析。

视频数据的“实时”转码功能

移动互联网上的终端只具有有限的多媒体编解码能力,其原因分析起来,一来受限于平台的多媒体能力支持,二来受限于版权授权的限制,像PC电脑特别是国内的PC电脑上,几乎无限制的在系统上安装了各种编解码器,具有几乎是无限的视频编解码能力。于是,苹果平台上有一类软件能完成下面的功能,PC电脑上安装一个服务器,客户端运行在iPad/iPhone等移动互联网终端上,运行在PC电脑上的模块负责把多媒体数据流“实时”转换成

移动互联网终端能支持的码流,Air Vedio/Air Play it就是这类应用。这类应用受限与苹果平台只支持HLS,势必也只能使用HLS方案。

下面的抓包在Air Vedio的服务器端PC侧进行抓包。下面这个HTTP请求是获取HLS多媒体流的索引文件。

下面这个http请求获取HLS的媒体分块文件。

苹果平台上的媒体流播放技术HLS的更多相关文章

  1. win7/win8通过媒体流(DLNA技术)共享音乐照片和视频

    http://www.jb51.net/os/windows/79421.html 工具/原料 Windows 7/8/10家庭高级版以上版本 家庭WiFi局域网(无须连接互联网) 支持DLNA的手机 ...

  2. phongap开发中安卓平台上如何调用第三方播放器来播放HLS视频

    前文曾经讲了关于在安卓平台上利用phonegap开发播放HLS的解决方案,其实最好的方案就是自己针对HLS视频开发自己的播放器,但是开发播放器是一个浩大的工程,必须对原生安卓开发非常熟悉,并且对视频播 ...

  3. 使用Vitamio开发iOS平台上的万能播放器

    迅速了解 Vitamio是干什么的?看官方怎么说: "Vitamio SDK for iOS是Yixia Ltd官方推出的 iOS 平台上使用的软件开发工具包(SDK),为iOS开发人员提供 ...

  4. 基于Flash与window平台本地程序通信实现媒体流发布

    0 Web场景下的媒体流发布可以采用Flash原生API实现,但是Flash H264视频压缩参数不可控.音频无法AAC编码,所以一般采用浏览器插件方式,但是浏览器插件有版本兼容问题.不稳定,所以可以 ...

  5. Unity3D游戏制作(三)——移动平台上的角色阴影制作

    本系列文章由 Amazonzx 编写,欢迎转载,转载请注明出处. http://blog.csdn.net/amazonzx/article/details/7973740 本文将重点介绍两种目前在移 ...

  6. 把演讲人的桌面、头像、声音合成后推送到 指定的直播流平台上; 录制电脑桌面、摄像头头像、声音保存为本地视频; 适用于讲课老师、医生等演讲内容保存为视频; 提供PPT嵌入Winform/WPF解决方案,Winform/WPF 中嵌入 office ppt 解决方案

    提供PPT嵌入Winform/WPF解决方案,Winform/WPF 中嵌入 office ppt 解决方案 Winform/WPF 中嵌入 office ppt(powerpoint)解决方案示: ...

  7. 公有云上构建云原生 AI 平台的探索与实践 - GOTC 技术论坛分享回顾

    7 月 9 日,GOTC 2021 全球开源技术峰会上海站与 WAIC 世界人工智能大会共同举办,峰会聚焦 AI 与云原生两大以开源驱动的前沿技术领域,邀请国家级研究机构与顶级互联网公司的一线技术专家 ...

  8. 抛开flash,自己开发实现C++ RTMP直播流播放器

    抛开flash,自己开发实现C++ RTMP直播流播放器 众所周知,RTMP是以flash为客户端播放器的直播协议,主要应用在B/S形式的场景中.本人研究并用C++开发实现了RTMP直播流协议的播放器 ...

  9. RTP、RTCP及媒体流同步

    转自:http://blog.163.com/liu_nongfu/blog/static/19079414220139169225333/ 一.流媒体简介 流媒体是指在internet中使用流媒体技 ...

随机推荐

  1. FTP两种工作模式:主动模式(Active FTP)和被动模式

    在主动模式下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,然后开放N+1号端口进行监听,并向服务器发出PORT N+1命令.服务器接收到命令后,会用其本地的FTP数据端口 ...

  2. JZOJ4307. 【NOIP2015模拟11.3晚】喝喝喝

    Description

  3. IT兄弟连 JavaWeb教程 Servlet转发

    Servlet对象由Servlet容器创建,并且Servlet对象的service()方法也由容器调用,一个Servlet对象可否直接调用另一个Servlet对象的service()方法呢?答案是否定 ...

  4. Springboot的yml文件

    spring: datasource: # 数据库四大组件 schema-password: root data-username: root driver-class-name: com.mysql ...

  5. nginx媒体类型

    在服务器的响应头中,有Content-Type一行,表明传输的http媒体类型. 比如:txt文件就用text/plain 表明. conf/mime.type types { text/html h ...

  6. Python 教程资源

    1.廖雪峰的官方网站 http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386 ...

  7. Investigation LightOJ - 1068

    Investigation LightOJ - 1068 常规数位dp题,对于不同k分开记忆化.注意:k大于82(1999999999的数位和)时不会有答案,直接输出0即可.还有,按照这种记录不同k时 ...

  8. 第03课 在VMwave 14.0 上配置企业级CentOS 6.6操作系统

    第一部分:配置虚拟硬件 1.1 启动VMware,选择文件-->新建虚拟机(Ctrl + N),创建一个虚拟机. (VMware的安装过程较为简单,可自行百度.) 1.2 此时,出现新建虚拟机向 ...

  9. HttpURLConnection 发送PUT请求 json请求体 与服务端接收

    发送请求: public void testHttp() { String result = ""; try { URL postURL = new URL("http: ...

  10. Jquery show()方法图解

    前两天面试的时候被问到了show()方法,当时回答的实在是太惨烈... 晚上看了一下,最简单的走法是直接移除行内样式的style属性. 如果这步走完了,元素还是隐藏的(display为none),元素 ...