`

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

 
阅读更多

   不经意间发现,大半年没写博客了,自觉汗颜。实则2012后半年,家中的事一样接着一样发生,实在是没有时间。快过年了,总算忙里偷闲,把最近的一些技术成果,总结成了文章,与大家分享。

  前些日子,也是项目需要,花了一些时间研究了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. 对原始数据进行H264编码和AAC编码
  3. 视频和音频数据封装为MPEG-TS包
  4. HLS分段生成策略及m3u8索引文件
  5. 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://www.cnblogs.com/haibindev/archive/2013/01/30/2880764.html

分享到:
评论

相关推荐

    音频直播-ios

    在iOS平台上实现音频直播涉及到多个技术领域,包括音频处理、网络传输、实时通信以及用户界面设计等。以下是对"音频直播-ios"这一主题的详细解释: 1. 音频处理: - AVFoundation框架:iOS中处理音频的核心框架,...

    swift-映客直播|Demo|iOS-swift

    这个项目提供了实际的代码示例,帮助开发者理解如何在iOS应用中实现直播功能。以下是对这个项目的关键知识点的详细解析: 1. **Swift语言基础**: Swift是Apple为开发iOS、macOS、watchOS和tvOS应用程序设计的现代...

    swift-iOS演示如何构建一个直播应用

    这通常涉及RTMP(Real-Time Messaging Protocol)或HLS(HTTP Live Streaming)等流媒体协议。开发者需要理解这些协议的工作原理,并使用如AVFoundation框架来处理视频流。 3. 前端摄像头和麦克风访问:Swift的...

    iOS流媒体播放

    在iOS平台上实现流媒体播放是一项重要的技术,它允许用户观看电影、视频和其他多媒体内容而无需等待整个文件下载完成。这得益于流媒体技术的实时传输特性,使得内容可以边下载边播放,大大提升了用户体验。以下是对...

    IOS应用源码之【应用】iPhone Internet Radio Streaming Application.rar

    这个名为"iPhone Internet Radio Streaming Application"的源码提供了一个实际的案例,可以帮助开发者深入理解如何在iOS设备上实现在线音频流播放。下面将详细讨论相关知识点: 1. **Objective-C或Swift编程**:iOS...

    电视直播节目-APK安卓平台-m3u8文件可以跨平台-以及源代码

    M3U8的优势在于支持HLS(HTTP Live Streaming),允许内容根据网络条件动态调整质量,确保流畅的播放体验,尤其适合移动设备和有限带宽环境。 在安卓平台上开发电视直播APP,开发者通常会使用M3U8作为主要的数据...

    IOS5源代码

    10. **网络服务**:如HTTP Live Streaming、Bonjour等网络服务在源代码中都有体现,这对于开发涉及网络的应用特别有帮助。 通过深入研究iOS 5的源代码,开发者不仅可以提升对iOS操作系统的理解,还能学习到如何编写...

    一种直播间的架构

    9. **流媒体协议选择**:常见的流媒体协议有RTMP、HLS(HTTP Live Streaming)和DASH(Dynamic Adaptive Streaming over HTTP),每种协议都有其优缺点,需要根据应用场景和目标平台选择合适的协议。 10. **负载...

    基于IOS平台的智能视频系统客户端设计与实现.rar

    在本项目中,我们主要探讨的是“基于iOS平台的智能视频系统客户端设计与实现”。这个主题涵盖了许多关键的IT技术和概念,特别是在移动应用开发、视频处理、网络通信以及用户界面设计等方面。以下是对这些核心知识点...

    ios应用源码之收音机 2018128

    为了接收广播信号,应用可能使用了HTTP Live Streaming (HLS)技术,这是Apple推荐的适应性流媒体协议,适用于直播和点播服务。HLS支持在不同网络条件下动态调整流的质量,以确保流畅的播放体验。 此外,UI设计也是...

    2019小智微直播.zip

    2. **实时音视频传输**:直播的核心是实现实时音视频传输,这涉及到RTMP(Real-Time Messaging Protocol)、HLS(HTTP Live Streaming)、RTSP(Real Time Streaming Protocol)等协议。其中,RTMP常用于低延迟的...

    直播系统完整技术资料下载

    1. **流媒体技术**:直播的核心是流媒体传输,常见的有RTMP(Real-Time Messaging Protocol)、HLS(HTTP Live Streaming)和DASH(Dynamic Adaptive Streaming over HTTP)。这些协议用于将视频源编码并分发到观众...

    直播间系统代码

    这通常依赖于RTMP(Real-Time Messaging Protocol)、HLS(HTTP Live Streaming)或WebRTC(Web Real-Time Communication)等技术。RTMP适合低延迟,但不支持移动设备;HLS则适合各种平台,但延迟相对较高;WebRTC...

    iOS video player.(iOS播放器).zip

    - **网络流媒体**:支持HTTP Live Streaming (HLS) 和其他流媒体协议。 - **全屏与小窗口播放**:提供切换模式,满足用户不同场景的需求。 - **手势控制**:通过手势控制音量、亮度和播放进度。 - **画面比例与旋转*...

    精仿直播吧5+体育

    在背后,可能采用了HTTP Live Streaming (HLS) 或 Adaptive Bitrate Streaming 等技术,这些技术可以根据用户的网络状况自动调整视频质量,确保流畅的观看体验。 在直播过程中,平台可能会利用CDN(Content Delivery...

    音乐播放器ios

    可以通过缓存部分音频数据或者利用HTTP Live Streaming (HLS) 技术进行流媒体播放。 3. 播放控制:除了基本的播放、暂停、停止操作,还需要实现跳过、快进、快退、循环播放、随机播放等功能。 三、音效优化 1. EQ...

    ios-全民TV.zip

    此外,考虑到直播特性,可能还涉及到流媒体技术,如HLS(HTTP Live Streaming),以及实时性、缓冲策略和网络状况的处理。 "标签"为"音频视频",意味着项目可能还包含了音频处理功能。AVFoundation框架同样适用于...

    live555 vs2008

    Live555是一个开源的C++库,主要用于实现RTSP(Real-Time Streaming Protocol)、RTP(Real-time Transport Protocol)、RTCP(Real-time Transport Control Protocol)和其他互联网实时通信协议,这些协议广泛应用...

    LiveStreams

    8. **监控与分析**:通过日志和分析工具,直播平台可以监控直播性能,了解用户行为,如观看时长、并发观众数等,以便优化服务。 9. **流类型**:根据应用场景,实时流媒体可分为点播(VoD,Video on Demand)和直播...

Global site tag (gtag.js) - Google Analytics