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

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

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

采集视频源和音频源的数据
对原始数据进行H264编码和AAC编码
视频和音频数据封装为MPEG-TS包
HLS分段生成策略及m3u8索引文件
HTTP传输协议
  其中第1点和第2点,我之前的文章中已经提到过了,而最后一点,我们可以借助现有的HTTP服务器,所以,实现第3点和第4点是关键所在。

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

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

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

HLS分段生成策略和m3u8

  1. 分段策略
    HLS的分段策略,基本上推荐是10秒一个分片,当然,具体时间还要根据分好后的分片的实际时长做标注
    通常来说,为了缓存等方面的原因,在索引文件中会保留最新的三个分片地址,以类似“滑动窗口”的形式,进行更新。
  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播放的效果

HTTP Live Streaming直播源代码软件开发(iOS直播)技术分析与实现相关推荐

  1. 直播网站源码直播平台软件开发iOS动手做一个直播(原理篇)

    直播网站源码直播平台软件开发iOS动手做一个直播(原理篇) 上篇文章主要给出了代码,但是并没有详细说明直播相关的知识,这篇文章就说一下直播的相关理论知识.附上直播代码篇地址. ###推流 腾讯直播平台 ...

  2. 直播软件开发IOS直播客户端SDK,视频直播APP源码【开源】

    当前视频直播非常火爆,手机端的视频直播也非常火爆,PGC.UGC的视频直播门槛都降低了很多. 本文介绍一个:IOS 客户端直播的SDK,代码完全开源. 直播时代:让IOS普通开发者一天内做出一个RTM ...

  3. 直播源代码中关于手机直播平台开发的登陆注册介绍

    一套完整的手机直播平台,需要有一套完善的直播源代码.开发一套符合大众需求,得到市场认可的直播平台,是需要开发公司经过不断优化调整更新的.只有开发出符合大众需求的直播平台,才能快速在市场当中得到认可和使 ...

  4. 直播软件开发互动直播之WebRTC服务开源技术选型

    直播软件开发互动直播之WebRTC服务开源技术选型 1 直播基础知识 最原始的直播系统其实并没有想象的那么复杂,无非就是主播端将音视频数据推送到服务器,观众端则从服务器拉取数据播放. 1.1 基本常识 ...

  5. 盘点直播直播平台软件开发技术中的编解码、直播协议、网络传输与简单实现

    盘点直播直播平台软件开发技术中的编解码.直播协议.网络传输与简单实现 编解码 视频封装格式就是我们通常所说的 .mp4,.flv,.ogv,.webm 等,它其实就是一个盒子,用来将实际的视频流以一定 ...

  6. 直播平台软件开发的前端如何实现整套视频直播技术流程

    直播平台软件开发的前端如何实现整套视频直播技术流程 正文 下面按照目录大纲来一个一个讲解. 1. 直播技术的介绍 直播技术涵盖很广,现如今大家广泛了解的就有视频网站的个人直播.手机直播.安防方面的摄像 ...

  7. 教你直播源代码来开发直播点赞功能

    教你直播源代码来开发直播点赞功能 今年的App行业,应该就是直播软件最火了.但凡是一个社交App,直播功能似乎已经是最基础的功能了. 这个只是一个点赞的小功能,并不是全部的直播 爱心图形 -(void ...

  8. 直播平台软件开发的流媒体直播为什么延迟很高

    直播平台软件开发的流媒体直播为什么延迟很高 通信技术的发展促进了视频点播和直播业务的兴起,4G 和 5G 网络技术的进步也使得流媒体技术变得越来越重要,但是网络技术并不能解决流媒体直播的高延迟问题,本 ...

  9. 直播平台软件开发都使用了什么协议呢?

    直播平台软件开发都使用了什么协议呢? 最近直播比较火,很多人都喜欢看直播,那一个直播系统里面都有哪些组成部分,都使用了什么协议呢? 直播平台软件开发中无论是直播还是点播,其实都是对于视频数据的传输.一 ...

最新文章

  1. mysql mairadb skysql
  2. 我在中国图书网不愉快的购书经历!!!!!!!
  3. LIS路径记录(UVA481)
  4. Maven-搭建普通maven项目
  5. web服务中使用线程池减少时间的方法
  6. hdu3787 A+B
  7. 知网一键下载PDF文献
  8. STC15单片机实战项目 - 系统评估
  9. JDBC部署到Tomcat驱动加载失败
  10. 计算机四级数据库分值分布,英语四级的题型及分值分布
  11. QQ自由幻想刺客加点
  12. Python计算机视觉(中英文版本)pdf+源代码
  13. vue学习回顾(2)
  14. linux图形界面和dos界面切换
  15. mac无法更新计算机的启动配置,MacOS 更新遇到的问题及重装系统
  16. [1005]pika 线程不安全
  17. APUE中ttyname的递归实现
  18. 2021-9-30 背景噪声的研究
  19. Word明明有很大空白表格还是自动换页
  20. HTML+CSS静态——绿色的餐饮美食网站(1页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码

热门文章

  1. vmware Workstation设置bios启动
  2. 电力-故障分析理论及对称分量法
  3. 【Centos】如何下载centos的各个版本镜像(演示下载Centos7.3)
  4. Erasure code 原理
  5. git代码回滚到某个tag
  6. 双重预防机制数字化系统赋能施工企业安全隐患闭环管理,安全风险分级管控
  7. Spring Aspect @PointCut(execution表达式)
  8. scala 字符串转Int, Long 类型
  9. Android gif 录屏
  10. frp服务端和客户端的配置和使用(超详细)