前些日子,也是项目需要,花了一些时间研究了HTTP Live StreamingHLS)技术,并实现了一个HLS编码器HLSLiveEncoder,当然,C++写的。其功能是采集摄像头与麦克风,实时进行H.264视频编码和AAC音频编码,并按照HLS的协议规范,生成分段的标准TS文件以及m3u8索引文件。通过我的HLSLiveEncoder和第三方Http服务器(例如:Nginx),成功实现了HTTP Live Streaming直播,并在iphone上测试通过。我就把这当中的一些收获写在这里。

HLS技术要点分析

HTTP Live StreamingHLS)是苹果公司(Apple Inc.)实现的基于HTTP的流媒体传输协议,可实现流媒体的直播和点播,主要应用在iOS系统,为iOS设备(如iPhone、iPad)提供音视频直播和点播方案。HLS点播,基本上就是常见的分段HTTP点播,不同在于,它的分段非常小。要实现HLS点播,重点在于对媒体文件分段,目前有不少开源工具可以使用,这里我就不再讨论,只谈HLS直播技术。

相对于常见的流媒体直播协议,例如RTMP协议、RTSP协议、MMS协议等,HLS直播最大的不同在于,直播客户端获取到的,并不是一个完整的数据流。HLS协议在服务器端将直播数据流存储为连续的、很短时长的媒体文件(MPEG-TS格式),而客户端则不断的下载并播放这些小文件,因为服务器端总是会将最新的直播数据生成新的小文件,这样客户端只要不停的按顺序播放从服务器获取到的文件,就实现了直播。由此可见,基本上可以认为,HLS是以点播的技术方式来实现直播。由于数据通过HTTP协议传输,所以完全不用考虑防火墙或者代理的问题,而且分段文件的时长很短,客户端可以很快的选择和切换码率,以适应不同带宽条件下的播放。不过HLS的这种技术特点,决定了它的延迟一般总是会高于普通的流媒体直播协议。

根据以上的了解要实现HTTP Live Streaming直播,需要研究并实现以下技术关键点

其中第1点和第2点,我之前的文章中已经提到过了,而最后一点,我们可以借助现有的HTTP服务器,所以,实现第3点和第4点是关键所在。

程序框架与实现          

通过以上分析,实现HLS LiveEncoder直播编码器,其逻辑和流程基本上很清楚了:分别开启音频与视频编码线程,通过DirectShow(或其他)技术来实现音视频采集,随后分别调用libx264和libfaac进行视频和音频编码。两个编码线程实时编码音视频数据后,根据自定义的分片策略,存储在某个MPEG-TS格式分段文件中,当完成一个分段文件的存储后,更新m3u8索引文件。如下图所示:

上图中HLSLiveEncoder当收到视频和音频数据后,需要首先判断,当前分片是否应该结束,并创建新分片,以延续TS分片的不断生成。需要注意的是,新的分片,应当从关键帧开始,防止播放器解码失败。核心代码如下所示:

TsMuxer的接口也是比较简单的。

HLS分段生成策略和m3u8   

1. 分段策略

2. m3u8文件简介

m3u8,是HTTP Live Streaming直播的索引文件。m3u8基本上可以认为就是.m3u格式文件,区别在于,m3u8文件使用UTF-8字符编码。

#EXTM3U                     m3u文件头,必须放在第一行
#EXT-X-MEDIA-SEQUENCE       第一个TS分片的序列号
#EXT-X-TARGETDURATION       每个分片TS的最大的时长
#EXT-X-ALLOW-CACHE          是否允许cache
#EXT-X-ENDLIST              m3u8文件结束符
#EXTINF                     extra info,分片TS的信息,如时长,带宽等

一个简单的m3u8索引文件

运行效果          

在Nginx工作目录下启动HLSLiveEncoder,并用VLC播放器连接播放

通过iPhone播放的效果

来自 <https://www.cnblogs.com/haibindev/archive/2013/01/30/2880764.html>

HLS特点总结

  • HLS的分段策略,基本上推荐是10秒一个分片,当然,具体时间还要根据分好后的分片的实际时长做标注

  • 通常来说,为了缓存等方面的原因,在索引文件中会保留最新的三个分片地址,以类似“滑动窗口”的形式,进行更新。

  • 采集视频源和音频源的数据

  • 对原始数据进行H264编码和AAC编码

  • 视频和音频数据封装为MPEG-TS包

  • HLS分段生成策略及m3u8索引文件

  • HTTP传输协议

HTTP Live Streaming直播(iOS直播)技术分析与实现相关推荐

  1. HTTP Live Streaming直播(iOS直播)技术分析与实现(转)

    HTTP Live Streaming直播(iOS直播)技术分析与实现 转载于:https://www.cnblogs.com/chen-jt/p/3885223.html

  2. 直播开篇——电商直播系统源码直播场景和技术分析

    一.直播场景和技术分析 好吧,既然你们非要搞什么直播,我就开始写写直播吧,怪不得WebRTC是下一代关键技术,直播的一些业务页必须要用WebRTC来实现 1. 电商直播系统源码场景分析 秀场直播 这个 ...

  3. 个人直播背后的技术分析

    文/胡小清 作者简介: 2000 年加入华为,一直从事软件产品和解决方案的研发.系统设计.架构设计工作. 2007 年开始负责 MTV.SDP.MBB VGS.Video 解决方案和 CDN.STB ...

  4. android手机采集,Android手机直播之采集技术分析

    近两年来直播行业越来越火,图玩智能科技为企业提供直播平台二次开发服务以及各类app的开发,欢迎随时咨询www.toivan.com. 作为Android手机直播的研发,本着技术分享的精神,现在写一系列 ...

  5. android直播流渲染,Android手机直播之处理技术分析

    前一篇我为大家介绍了Android手机直播的采集技术,这一篇继续为大家介绍直播流程中对视频和音频的处理技术.图玩智能科技为企业提供直播平台的二次开发服务以及各类app的开发,欢迎随时咨询www.toi ...

  6. 手机直播连麦技术分析

    直播火了,连麦直播也火了,那么说明是直播,连麦直播是什么. 手机直播连麦功能的特点,我们按下面三部分来聊一聊手机直播和直播连麦: 手机直播连麦功能的特点 人物画像和设计思维 一个有趣的连麦功能交互建议 ...

  7. 视频直播iOS端技术

    作者:陶金亮 网易通信与视频资深开发工程师 随着网络基础建设的发展和资费的下降,在这个内容消费升级的时代,文字.图片无法满足人们对视觉的需求,因此视频直播应运而生.承载了实时性Real-Time和交互 ...

  8. 网红带货直播,直播带货,在线教育直播,火山抖音娱乐直播中的技术分析---推流与播流

    网红带货直播最核心的技术即时推流与拉流,硬件要求高这是必须的,特别是网络带宽.但是硬技术就是推拉流的配置和即时通讯中的并发问题.作为一个直播直播平台,下面是腾讯的解决不方案,实现的高度整合.以下分多文 ...

  9. (0077)iOS开发之直播播放器技术名词理解以及开发准备(待实现直播demo)

    本文主要是为了理解最近比较火的直播软件.播放器软件的实现原理的调研.为以后研究相关开发做准备.调研整理: 关键词:iOS直播 类似斗鱼,虎牙等直播平台都运用了哪方面前后端技术? https://www ...

  10. iOS直播APP流程和相关技术介绍

    文章目录 直播APP流程技术 1.音视频采集 2.视频过滤 3.音视频编码 4.音视频推流 5.流媒体处理数据 6.拉流 7.音视频解码 8.播放 9.聊天互动 流媒体知识核心概念 直播APP流程技术 ...

最新文章

  1. 缓存算法(页面置换算法)-FIFO、LFU、LRU
  2. Keil恢复默认界面
  3. 萌新的九宫棋(C语言)
  4. OpenCV学习:播放avi视频文件
  5. 如何查看 JSP 和 Servlet 的版本
  6. 版本不一致_一致哈希:Beyond the basics
  7. SpringCloud集成Security安全(Eureka注册中心)
  8. PHPCMS之 列表和内容页
  9. ibase4j使用信息心得
  10. c语言编程屏保动画实例,用C语言自己动手制作炫彩电脑屏保
  11. 高分辨率图片导入unity模糊问题
  12. A星算法优化(二)权重系数
  13. 搜狗输入法纯净_输入法纯净,你其实只差个补丁
  14. Java IO和NIO的区别
  15. 逃离塔科夫机器码解除,实战解决【100%成功方法】
  16. Python读取redis数据含有‘b‘
  17. 桌面创建快捷方式 不显示图标
  18. html旋转360度特效,CSS3图片旋转特效(360/60/-360度)?
  19. QT图形显示和处理6
  20. 张飞流水帐(完整版)

热门文章

  1. Installed Build Tools revision 33.0.0 is corrupted. Remove and install again using the SDK Manager
  2. 2022年诺贝尔物理学奖背后的故事——贝尔不等式诞生之后
  3. The Witness - 美不胜收的解谜游戏
  4. [window] win7系统下电脑声音正常,右下角的小喇叭图标不见了
  5. 程序员 做头发 奇遇记
  6. 10x 程序员工作法 - 划重点 | “自动化”主题的重点内容回顾汇总
  7. 表情识别论文《OAENet Oriented Attention Ensemble for Accurate FacialExpression Recognition》中文翻译
  8. 天翼云技术B卷编程题
  9. 面试自我介绍3分钟通用计算机专业,面试自我介绍3分钟
  10. 10个python办公黑科技,助你办公效率提高100倍