iOS 视频直播开发笔记(一)

直播推流需要的三方库和一些常用格式和协议介绍

1.rtmp协议 :实时消息传输协议,Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的开  放协议,因为是开放协议所以都可以使用了。RTMP协议用于对象、视频、音频的传输。这个协议建立在TCP协议或者轮询HTTP协议之上。RTMP协议就像一个用来装数据包的容器,这些数据可以是FLV中的视音频数据。一个单一的连接可以通过不同的通道传输多路网络流,这些通道中的包都是按照固定大小的包传输的

2.nginx:免费开源web服务器,常用来配置流媒体服务器。(后面会写一篇介绍如何在mac上搭建Nginx服务器)

3.常用直播协议介绍与对比

iOS 视频直播开发笔记(一)_第1张图片

      HLS:由Apple公司定义的用于实时流传输的协议,HLS基于HTTP协议实现,传输内容包括两部分,一是M3U8描述文件,二是TS媒体文件。可实现流媒体的直播和点播,主要应用在iOS系统

      HLS是以点播的技术方式来实现直播

      HLS是自适应码率流播,客户端会根据网络状况自动选择不同码率的视频流,条件允许的情况下使用高码率,网络繁忙的时候使用低码率,并且自动在二者间随意切换。这对移动设备网络状况不稳定的情况下保障流畅播放非常有帮助。

      实现方法是服务器端提供多码率视频流,并且在列表文件中注明,播放器根据播放进度和下载速度自动调整。

      HLS与RTMP对比:HLS主要是延时比较大,RTMP主要优势在于延时低

      HLS协议的小切片方式会生成大量的文件,存储或处理这些文件会造成大量资源浪费

      相比使用RTSP协议的好处在于,一旦切分完成,之后的分发过程完全不需要额外使用任何专门软件,普通的网络服务器即可,大大降低了CDN边缘服务器的配置要求,可以使用任何现成的CDN,而一般服务器很少支持RTSP。

      HTTP-FLV:基于HTTP协议流式的传输媒体内容。

      相对于RTMP,HTTP更简单和广为人知,内容延迟同样可以做到1~3秒,打开速度更快,因为HTTP本身没有复杂的状态交互。所以从延迟角度来看,HTTP-FLV要优于RTMP。

     RTSP:实时流传输协议,定义了一对多应用程序如何有效地通过IP网络传送多媒体数据。

       RTP:实时传输协议,RTP是建立在UDP协议上的,常与RTCP一起使用,其本身并没有提供按时发送机制或其它服务质量(QoS)保证,它依赖于低层服务去实现这一过程。

      RTCP:RTP的配套协议,主要功能是为RTP所提供的服务质量(QoS)提供反馈,收集相关媒体连接的统计信息,例如传输字节数,传输分组数,丢失分组数,单向和双向网络延迟等等

      关于协议的选择方面:即时性要求较高或有互动需求的可以采用RTMP,RTSP;对于有回放或跨平台需求的,推荐使用HLS

4.视频封装格式:

       TS: 一种流媒体封装格式,流媒体封装有一个好处,就是不需要加载索引再播放,大大减少了首次载入的延迟,如果片子比较长,mp4文件的索引相当大,影响用户体验

       为什么要用TS:这是因为两个TS片段可以无缝拼接,播放器能连续播放

       FLV: 一种流媒体封装格式,由于它形成的文件极小、加载速度极快,使得网络观看视频文件成为可能,因此FLV格式成为了当今主流视频格式

5. 需要的库文件

       librtmp:这是一个C++的开源工程。主要作用是下载RTMP流媒体

       libfaac :将获取到的音频数据编码成acc格式以及将aac数据合成flv格式

       libx264:把视频原数据YUV编码压缩成H.264格式

       libyuv:将获取到的视频转化为yuv(NV12)格式

二:推流主要流程

1 :获取视频音频流 此处主要用不带美颜效果的系统获取方法

(1)、初始化视频设备

(2)、创建输入输出管道

(3)、创建会话

(4)、创建预览

(5)、在前面几步实现后我们就可以来用系统方法获取视频音频流了,这个方法是。     AVCaptureAudioDataOutputSampleBufferDelegate的代理方法,由于系统返回没有区分是视频数据还是音频数据 所以我们需要自己代码判断。

 

 

 

 

你可能感兴趣的:(iOS)