推流和拉流

整个直播过程主要涉及到采集、处理、编码、封装、推流、传输、解码等一系列过程,推流是指使用推流工具等内容抓取软件把直播内容传输到服务器的过程。

经过输出设备(AVCaptureVideoDataOutput)得到原始的采样数据–视频数据(YUV)和音频数据(AAC);
使用硬编码(对应系统的API)或软编码(FFMpeg)来编码压缩音视频数据;
分别得到已编码的H.264视频数据和AAC音频数据;
根据不同的封装格式(如FLV、TS、MPEG-TS);
使用HLS协议的时候加上这一步(HLS分段生成策略及m3u8索引文件)
通过流上传到服务器;
服务器进行相关协议的分发

采集,在商业活动领域,摄像机占据主流地位,足以应付大部分场面,选择带有直播功能的摄像机更是事半功倍,整个流媒体比喻成一个物流系统,那么编解码就是其中配货和装货的过程,这个过程非常重要,它的速度和压缩比对物流系统的意义非常大,影响物流系统的整体速度和成本。同样,对流媒体传输来说,编码也非常重要,它的编码性能、编码速度和编码压缩比会直接影响整个流媒体传输的用户体验和传输成本
推流也可以理解为利用编码器将视频内容进行编码后推到服务器的过程。经过H.264编码压缩之后,1080P 的 7 s 视频大小只有708K,10Mbps的带宽仅仅需要500ms,可以满足实时传输的需求,所以原始视频势必要经过视频编码
直播“推流”需要推流协议,对音视频数据使用传输协议进行封装,变成流数据,这是直播背后原理最重要的部分

RTMP 是 Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于 TCP,是一个协议族,包括 RTMP 基本协议及 RTMPT/RTMPS/RTMPE 等多种变种。RTMP 是一种设计用来进行实时数据通信的网络协议,主要用来在 Flash/AIR 平台和支持 RTMP 协议的流媒体/交互服务器之间进行音视频和数据通信。
RTMP 是目前主流的流媒体传输协议,广泛用于直播领域,可以说市面上绝大多数的直播产品都采用了这个协议。
我们的直播使用的RTMP协议,有一个重要的有点就是主流的CDN厂商都支持这个协议,简单理解就是这样我们的直播在世界上不同的地方观看就“更快”。但是他的缺点也比较明显,比如不支持浏览器推送。比如我们想做一个H5的活动页面,有个一推流的功能,这个咋个办呢?这个时间WebRTC就有优势了,它是基于W3C标准,主流浏览器支持度都比较高。

Http Live Streaming是由Apple公司定义的基于HTTP的流媒体实时传输协议。它的原理是将整个流分为多个小的文件来下载,每次只下载若干个。服务器端会将最新的直播数据生成新的小文件,客户端只要不停的按顺序播放从服务器获取到的文件,就实现了直播。基本上,HLS是以点播的技术实现了直播的体验。因为每个小文件的时长很短,客户端可以很快地切换码率,以适应不同带宽条件下的播放。
分段推送的技术特点,决定了HLS的延迟一般会高于普通的流媒体直播协议。
传输内容包括两部分:一是M3U8描述文件,二是TS媒体文件。TS媒体文件中的视频必须是H264编码,音频必须是AAC或MP3编码。

WebRTC,名称源自网页即时通信(英语:Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的 API。目前主要应用于视频会议和连麦中。
在这里插入图片描述

拉流,指服务器已有直播内容,用指定地址进行拉取的过程。根据协议类型(如RTMP、RTP、RTSP、HTTP等),与服务器建立连接并接收数据;流程如下:

解析二进制数据,从中找到相关流信息;
根据不同的封装格式(如FLV、TS)解复用(demux);
分别得到已编码的H.264视频数据和AAC音频数据;
使用硬解码(对应系统的API)或软解码(FFMpeg)来解压音视频数据;
经过解码后得到原始的视频数据(YUV)和音频数据(AAC);
因为音频和视频解码是分开的,所以我们得把它们同步起来,否则会出现音视频不同步的现象,比如别人说话会跟口型对不上;
最后把同步的音频数据送到耳机或外放,视频数据送到屏幕上显示。

采集数据:iOS平台上采集音视频数据,需要使用AVFoundation.Framework框架,从captureSession会话的回调中获取音频,视频数据。
传输层协议:主要采用RTMP协议居多(默认端口1935,采用TCP协议),也有部分使用HLS协议
音/视频编码解码:FFMpeg编码解码
视频编码格式:H.265、H.264、MPEG-4等,封装容器有TS、MKV、AVI、MP4等
音频编码格式:G.711μ、AAC、Opus等,封装有MP3、OGG、AAC等
渲染工具:采用OpenGL渲染YUV数据,呈现视频画面。将PCM送入设备的硬件资源播放,产生声音。iOS播放流式音频,使用Audio Queue 的方式,即,利用AudioToolbox.Framework 框架。

  • 3
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值