2016年被誉为“移动直播元年”,中国的网络直播用户已经超过3亿,百度,腾讯,淘宝,网易等都有自己的直播平台。本文主要分享一些移动直播的相关技术点。
一、什么是视频
任何一个视频文件,从结构上讲,都是这样一种组成方式:
-由图像和音频构成最基本的内容元素;
-图像经过视频编码压缩格式处理(通常是 H.264);
-音频经过音频编码压缩格式处理(例如 AAC);
-注明相应的元信息(Metadata);
-最后经过一遍容器(Container)封装打包(例如 MP4),构成一个完整的视频文件。
二、什么是视频直播
简而言之,直播就是将每一帧数据 ( Video / Audio / Data Frame ),打上时序标签 ( Timestamp ) 后进行流式传输的过程。发送端源源不断的采集音视频数据,经过编码、封包、推流,再经过中继分发网络进行扩散传播,播放端再源源不断地下载数据并按时序进行解码播放。如此就实现了 “边生产、边传输、边消费” 的直播过程。
三、GOP ( Group of Pictures )
为了便于视频内容的存储和传输,通常需要减少视频内容的体积,也就是需要将原始的内容元素(图像和音频)经过压缩,压缩算法也简称编码格式。例如视频里边的原始图像数据会采用 H.264 编码格式进行压缩,音频采样数据会采用 AAC 编码格式进行压缩。当要观看播放时,相应地也需要解码过程。因此编码和解码之间,需要约定一种编码器和解码器都可以理解的约定。就视频图像编码和解码而言,这种约定很简单:
编码器将多张图像进行编码后生产成一段一段的 GOP ( Group of Pictures ) , 解码器在播放时则是读取一段一段的 GOP 进行解码后读取画面再渲染显示。GOP 是一组连续的画面,由一张 I 帧和数张 B / P 帧组成,是视频图像编码器和解码器存取的基本单位,它的排列顺序将会一直重复到影像结束。I 帧是内部编码帧(也称为关键帧),P 帧是前向预测帧(前向参考帧),B 帧是双向内插帧(双向参考帧)。简单地讲,I 帧是一个完整的画面,而 P 帧和 B 帧记录的是相对于 I 帧的变化。如果没有 I 帧,P 帧和 B 帧就无法解码。因此,一个视频,其图像部分的数据是一组 GOP 的集合, 而单个 GOP 则是一组 I / P / B 帧图像的集合。
四、推流和拉流的概念以及RTMP和HLS协议
推流,指的是把采集阶段封包好的内容传输到服务器的过程;拉流,是服务器已有直播内容,用指定地址进行拉取的过程。
RTMP
RTMP是Real Time Messaging Protocol(实时消息传输协议)的缩写,是Adobe公司为Flash/AIR平台和服务器之间音、视频及数据传输开发的实时消息传送协议。RTMP协议基于TCP,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP协议中,视频必须是H264编码,音频必须是AAC或MP3编码,且多以flv格式封包。RTMP是目前最主流的流媒体传输协议,对CDN支持良好,实现难度较低,是大多数的直播平台的选择。不过RTMP有着一个最大的不足——不支持浏览器,且Adobe已不再更新。因此直播服务要支持浏览器的话,需要另外的推送协议支持。
HLS
HTTP Live Streaming(缩写是HLS)是一个由苹果公司提出的基于HTTP的流媒体网络传输协议,是苹果公司QuickTime X和iPhone软件系统的一部分。它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。基本可以认为,HLS是以点播的技术方式来实现直播。由于数据通过HTTP协议传输,所以完全不用考虑防火墙或者代理的问题,而且分段文件的时长很短,客户端可以很快的选择和切换码率,以适应不同带宽条件下的播放。不过HLS的这种技术特点,决定了它的延迟一般总是会高于普通的流媒体直播协议。HLS传输内容包括两部分:一是M3U8描述文件,二是TS媒体文件。TS媒体文件中的视频必须是H264编码,音频必须是AAC或MP3编码。
每一个 .m3u8 文件,分别对应若干个 ts 文件,这些 ts 文件才是真正存放视频的数据,m3u8 文件只是存放了一些 ts 文件的配置信息和相关路径,当视频播放时,.m3u8 是动态改变的。一般为了加快速度,.m3u8 放在 Web 服务器上,ts 文件放在 CDN 上。.m3u8 文件,其实就是以 UTF-8 编码的 m3u 文件,这个文件本身不能播放,只是存放了播放信息的文本文件。
HLS请求流程:HTTP 请求 m3u8 的url;服务端返回一个 m3u8 的播放列表,这个播放列表是实时更新的,一般一次给出5段数据的 url;客户端解析 m3u8 的播放列表,再按序请求每一段的 url,获取 ts 数据流。
HLS延时:假设列表里包含5个 ts 文件,每个 TS 文件包含5秒的视频内容,那么整体的延迟就是25秒。因为当用户看到这些视频时,主播已经将视频录制好上传上去了。当然可以缩短列表的长度和单个 ts 文件的大小来降低延迟,极致来说可以缩减列表长度为1,并且 ts 的时长为1s,但是这样会造成请求次数增加,增大服务器压力,当网速慢时会造成更多的缓冲,所以苹果官方推荐的 ts 时长为10s,所以这样就会大概有30s的延迟。
协议 | 原理 | 延时 | 优点 | 使用场景 | |
RTMP |
长链接 tcp |
每个时刻的数据收到后立刻发送 | 2s | 延时低 | 即时互动 |
HLS |
短链接 http |
集合一段时间数据生成ts切片文件更新m3u8文件 |
10-30s | 跨平台 | H5直播 |
相关推荐
《深入浅出:5G移动通信标准和架构》是一本深度解析5G技术的专业书籍,其赠阅版包含了丰富的5G知识,对于理解和掌握5G技术具有重要价值。5G,全称为第五代移动通信技术,是当前全球信息技术领域的热点,它的出现不仅...
总的来说,移动通信是一个涉及多层面、多技术的复杂系统,它的发展历程从模拟到数字,从单一语音服务到多媒体业务,反映了信息技术的飞速进步。随着5G和未来6G的到来,移动通信将继续革新我们的生活方式,提供更高速...
当前已经是移动互联网时代,Java持久框架Hibernate没有办法适应高性能,灵活,大数据,可优化等要求,这时MyBatis就进入了我们的视野,随着移动互联网应用的持续发酵,Spring MyBatis的应用已在Java互联网平台上得到...
### WPF深入浅出知识点详解 #### 一、引言:生产力与软件开发工具的进化 自古以来,生产工具的先进程度一直是衡量生产力水平的关键指标。随着科技的进步,计算机软件开发领域同样经历了一系列工具和技术的革新。从...
本书《深入浅出WPF》是刘铁猛所著,目的是为了深入浅出地介绍WPF技术。作者利用丰富的开发经验和对技术的深刻理解,将WPF的复杂概念分解成浅显易懂的知识点。全书分为两个主要部分,第一部分主要介绍WPF开发的基础...
《深入浅出通讯原理》是陈爱军老师的一部著作,该书全面而深入地探讨了通讯技术的基础理论。在当今信息化社会,通讯技术已成为连接世界的重要桥梁,无论是日常生活中的手机通信、互联网传输,还是工业领域的远程监控...
《深入浅出ARM7》是周立功先生撰写的一本关于ARM微处理器体系结构和技术的专著,这本书深入解析了ARM7处理器的工作原理及其在嵌入式系统中的应用。ARM7是ARM公司早期设计的一种高性能、低功耗的32位RISC(精简指令集...
本资料包“深入浅出 PhoneGap 代码”显然旨在帮助开发者更全面地理解PhoneGap的工作原理和实际应用。 PhoneGap 的核心组件包括: 1. **Cordova**: PhoneGap 基于 Apache Cordova,这是一个开源的移动设备API库,它...
**深入浅出LTE** LTE(Long Term Evolution)是第四代(4G)移动通信技术,旨在提供高速、低延迟的数据传输服务,为用户提供无缝的移动互联网体验。它基于全IP网络架构,采用了一系列先进的无线技术和协议优化,以...
总之,《竹林蹊径 深入浅出Windows驱动开发》是一本非常适合希望深入了解Windows驱动开发的技术人员阅读的书籍,无论是对于初学者还是有一定经验的开发者来说,都能够从中获得有价值的信息和指导。
压缩包中的文件“深入浅出ARM7-LPC213x_214x(上下)”包含了全套书籍的电子版,方便读者在电脑或移动设备上阅读和查阅,随时随地学习和巩固ARM7的相关知识。结合书中的实例代码和实验指导,读者可以边学边练,加深...
通过阅读“R15 38.331 无线资源控制(RRC)协议规范.pdf”和“深入浅出:5G移动通信标准和构架-预览版.pdf”这两份资料,可以深入了解5G的核心技术和协议细节,从而更好地适应未来通信行业的发展。
总之,《深入浅出Android》作为一本全面的教程,覆盖了Android开发的各个方面,从基础知识到高级技术,为读者提供了一个扎实的学习路径。通过阅读和实践,开发者可以逐步掌握Android开发的技巧,从而创造出功能丰富...
《深入浅出Servlets and JSP第二版》作为一本专注于Java Web开发技术的书籍,主要涵盖了Servlet和JSP两项技术,并且强调了学习过程中的趣味性和易理解性。下面,我们来详细探讨一下从给定信息中可以提取的相关知识点...
《深入浅出iPhone开发》是一本专为iPhone应用程序开发初学者编写的指南,旨在通过实际应用案例,系统地介绍iOS开发的各项技术。本书的核心目标是让读者能够从零基础逐步掌握开发iPhone应用所需的知识和技能。 在iOS...
- **综合评价**:从整体上看,《深入浅出 Python(中文版)》被赞誉为一本既有趣又实用的编程学习指南,它不仅适合初学者,也适合那些想要深入了解Python编程技术的开发者们。 总之,《深入浅出 Python(中文版)》...
"深入浅出JavaScript" 是一套专门针对JavaScript初学者和进阶者设计的学习资料,旨在帮助读者全面理解这门语言,并通过实例加深对概念的理解。这本书的中文版——"Head First JavaScript",以其独特的视觉和互动式...