音视频采集封装到直播推流的简单原理

来源:互联网 发布:js array indexof ie5 编辑:程序博客网 时间:2024/06/05 10:54

那么今天要分享的主要是两个内容,第一个是对硬件采集的资源怎么做一个打包封装,另一个是处理完成的资源如何直播,作为在日常业务测试线的一个业务逻辑扩展,纯粹个人理解,所以不会有一些深入的讲解,毕竟网上的文章够多了。

直接用visio花了一张图:
这里写图片描述

一、采集 && 封装

针对手机外接硬件的一个音视频采集,采集到的都是原始数据,那么这些数据经过一系列的处理,封装成用户可以直接播放的文件,比如mp4、mkv等等。
原始视频的格式一般是YUV和RGB等等,那么常用的就是yuv420,原始音频格式一般是PCM、FLTP等(这里只列出来了项目中用到的两个),特点就是很大。
压缩编码的意思,就是对原始音视频资源进行压缩和编码,涉及到的编码标准常用的就是h264以及acc。
封装的意思就是把经过压缩编码的音视频和一些meatadata标签信息,一起打包成可供播放的资源文件,类似mp4这种。
上面这几部的信息可以通过ffmpeg -i 你的资源这条命令查看,比如我随便找了我电脑上的一个mp4文件:
这里写图片描述
可以看到还是比较全的,下面来看看:
Metadata:可以读到封包的一些信息、资源创建时间、长度啊等等,如果会安卓开发的话可以发现android提供了一个类MediaMetadataReceiver,专门用来存这些信息的。
Stream:这个是一些压缩编码的信息了,可以看到音频是用了acc编码的,视频用的是h246编码的,以及编码时候的码率,分辨率这些信息,嗯,后面还带有音视频流的一些metadata信息。
那么第一部分就说完了。

二、接下来第二部分,是直播的一个原理。

那么经过采集封装后的资源,就需要经过推流到服务器,然后播放器再去接收服务器给的地址实现直播播放,这里要了解的是推流协议和流媒体协议。
推流协议一般都是rtmp,没什么说的,然后直播流媒体协议主要是下面4个:

  • 列表内容
  • RTMP:延迟低,用的最多,是基于tcp的
  • HDL(HTTP_FLV):延迟同样低,用的也挺多,不同rtmp,这货是基于http的
  • HLS:延迟高,因为要分段去下载接收,但是支持h5,易于传播易于观看
  • RTP:实时传输,常用在视频会议

RTMP和HDL两个协议至少我们公司是同时RTMP和HDL都支持的,两者相差不大。

1 0
原创粉丝点击