首页 网站首页 商业信息 推流 查看内容

Android 音视频——直播推流技术指南

微信营销 2023-4-2 19:32 7563人围观 推流

一、推流架构

推流SDK客户真个模块首要有三个,推流收集端、行列控制模块、推流端。其中每个模块的首要流程以下,本文的首要目标就是拆分推流流程,




1.1 收集端

视频收集:经过Camera收集视频。

音频收集:经过麦克风收集音频。

视频后处置:美颜、滤镜、贴纸、翻转等殊效。

音频后处置:重采样、3A处置等。

视频编码:支持硬编码和软编码,同时支持H264和HEVC编码,出格要留意编码的特别情况。

音频编码:AAC编码

收集真个很多功用都是平台相关的,相机收集、编码等Android和iOS上处置都纷歧样。特别是Android平台,很多机型和芯片,固然会有一些特别的情况需要兼容下,这个前面我们会具体描写的。

1.2 行列控制

行列控制模块是推流SDK很是重要的控制模块,推流SDK就是一个很简单的“生产者——消耗者模子”,收集端是生产者,推流端是消耗者,收集端收集的是当地数据,推流端和办事端交互,一般情况下都是推流端会出现提早,像弱网情况下推流端消耗必定会很慢,可是收集端速度并不会慢下来,假如没有行列控制这个降压阀,那很大都据就会聚积在行列中,当地数据不竭聚积,终极致使OOM。

行列控制应当若何控制?

视频的数据比音频大很多,所以行列控制主如果视频基准,音频随着视频响应丢帧。

编码以后视频行列巨细设备为60,在推流的进程中,发现视频的行列已满,需要抛弃行列最前面的一帧,然后再入队新的一帧,音频行列也要同步操纵,对应时候点的音频数据也要丢掉。

1.3 推流端

推流采用的是RTMP协议,RTMP是Adobe公司开辟的,算是究竟上的产业标准,全称是Real Time Messaging Protocol,虽然实时性要比HLS好一点,可是也还有几秒左右的提早。它的底层是基于TCP协议。

RTMP协议的建连流程以下:




RTMP建连需要商量两件工作:

  • 版本号:客户端和办事器的版本号纷歧致,没法继续工作
  • 时候戳,视频播放进程中,时候戳很重要,假如没有,后续的音视频同步没法继续展开。

首先,客户端发送 C0 暗示自己的版本号,不必等对方的答复,然后发送 C1 暗示自己的时候戳。办事器只要在收到 C0 的时辰,才能返回 S0,表白自己的版本号,假如版本不婚配,可以断开毗连。办事器发送完 S0 后,也不用等什么,就间接发送自己的时候戳 S1。客户端收到 S1 的时辰,发一个晓得了对方时候戳的 ACK C2。同理办事器收到 C1 的时辰,发一个晓得了对方时候戳的 ACK S2。

推流的进程,就是将 NALU 放在 Message 里面发送,这个也称为 RTMP Packet 包。Message 的格式就像这样。




一定要记着音频和视频的头部要零丁发送,在发送视频头部的视频,需要将NALU肇端标识符去掉,RTMP不需要它们。

三、技术要点

3.1 声音处置

在收集完声音以后,需要对音频停止3A处置,即声学反响消除(AEC)、布景噪声抑制(ANS)、自动增益控制(AGC),3A处置在声音前期处置中很是重要,在推流场景的声音处置中利用非常普遍。

  • AEC

反响消除(AEC)是指在二线传输的两个偏向上同时候、同频谱地占用线路,在线路两个偏向传输的信号完全混在一路,本端发信号的回波就成为了本端信号的干扰信号,操纵自适滤波器可抵消回波以到达较好的接收信号质量,即为反响消除。

反响消除的道理就是操纵接收到的音频与当地收集的音频做对照,增加反向的人造反响,将远真个声音消除。

  • ANS

布景噪声抑制(ANS)指的是将声音中的布景噪声识别并停止消除的处置。

布景噪声分平衡噪声瞬时噪声,平稳噪声频谱稳定,瞬时噪声频谱能量方差小,操纵噪声的特点,对音频数据增加反向波形处置即可消除。

今朝,对于平稳的噪声已经有很多种简双方式可以成功抑制,可是生活中常见的一些瞬态噪声却仍然缺少好法子。

瞬态噪声的配合特点就是突发性极强,在时域上呈振荡虚弱的形式,延续时候在十几毫秒至上百毫秒不等;在频域上散布很宽,瞬态噪声的频谱根基上是和一般语音的频谱混叠在一路,很难停止抑制。

  • AGC

自动增益控制(AGC)首要用于调剂音量幅值,进步语音通讯系统在带噪声情况中的性能。

人们一般扳谈的音量在 40-60dB 之间,低于 25dB 的声音听起来很费劲,而跨越 100dB 的声音会让人感应不适,AGC 的感化就是将音量调剂到人接管的范围

音频响度及麦克风拾音控制是保证音视频相同质量的重要技术手段,一般来说,音频标准、传输条件、报酬失误等身分都能够致使音频信号之间出现声音突变大概响度纷歧致的情况,这时辰就需要对音频信号放大或缩小以获得自然清楚的语音通讯。

3.2 视频处置

相机收集的原始数据首先要停止帧处置,主播凡是会利用一些殊效,例如美颜、滤镜等,这些城市在视频帧后处置流程中展开,帧处置以后才会停止编码处置。

H264和H265编码还有点分歧。

H264头部由SPS和PPS组成,SPS是序列参数集,包括一个图像序列的一切信息,如图像尺寸、视频格式等;PPS是图像参数集,包括一个图像的一切分片的相关信息,如图片范例、序列号。

H264的码流结构以下:

肇端码 + SPS + 肇端码 + PPS + 肇端码 + SEI + 肇端码 + I帧 + 肇端码 + P帧 + ......

H265头部除了SPS和PPS之外,还有一个VPS,VPS是视频参数集。

H265码流结构以下:

肇端码 + VPS + 肇端码 + SPS + 肇端码 + PPS + 肇端码 + SEI + 肇端码 + I帧 + 肇端码 + P帧 + ......

其中H264和H265的码流范例有两种,一种是Annexb格式,另一种是MP4格式,利用最普遍的还是Annexb格式,本文首要以Annexb为例。

肇端码只是起到朋分的感化,并不是有用的视频数据,肇端码也有两种:

  • 4字节的00 00 00 01
  • 3字节的00 00 01

可是图像编码中也有能够出现00 00 00 01和00 00 01,出现这类情况怎样办?

  • 00 00 00 点窜成 00 00 03 00
  • 00 00 01 点窜成 00 00 03 01
  • 00 00 02 点窜成 00 00 03 02
  • 00 00 03 点窜成 00 00 03 03

这样在编码的进程中就不会出现混淆了。

3.3 推流控制

上文也说了在收集端和推流段实在是经过一个行列控制的,收集端收集当地的视频和音频,然后编码好了放入行列中,推流段从行列中取出视频和音频然后按照特定的格式发送到办事端。相当于收集端是往水池中注水,推流段是放水。

收集端是很快的,推流段是受限于收集的,假如收集状态比力好的情况下,可以到达一个较好的平衡,可是一旦收集变差,行列就会出现聚积,我们不成能让行列无穷聚积,需要设备一个行列阈值,固然行列已满,需要将行列华夏本的数据抛弃,将新数据入队。这样就会出现丢帧,这时辰推流段可以适当下降码率下降丢帧的几率。

3.4 支持FLV-HEVC

flv 是不支持H265的,需要手动点窜FLV支持H265编码息争码的剖析,固然也需要拉流段支持FLV-H265。


斟酌到有些小伙伴想进修音视频常识点,但不晓得从哪起头动手,下面小编整理了份《音视频进修笔记》供大师停止参考进修,里面是从入门到进阶的一个进程笔记。

音视频低级入门

音视频低级入门主如果打仗Android多媒体展现相关的API,经过零丁的罗列和利用这些API,对Android音视频处置有一个根基的表面,虽然常识点相对来说是比力散的,可是点成线、线成面,根基的根本把握了,经过进修Android音视频焦点的API将音视频的流程串联起来,这样对于音视频的领会和控制就不但仅范围于最外层的API了,而是可以经过相对底层的方式来加深对Android 音视频开辟的认知。



  • Android 音视频开辟(一):经过三种方式绘制图片
  • Android 音视频开辟(二):利用 AudioRecord 收集音频PCM并保存到文件
  • Android 音视频开辟(三):利用 AudioTrack 播放PCM音频
  • Android 音视频开辟(四):利用 Camera API 收集视频数据
  • Android 音视频开辟(五):利用 MediaExtractor 和 MediaMuxer API 剖析和封装 mp4 文件
  • Android 音视频开辟(六):MediaCodec API 详解
  • Android 音视频开辟(七):音视频录制流程总结
  • ……

音视频中级进阶:OpenSL ES 进修https://0a.fit/BzPVh

进修 Android 平台 OpenSL ES API,领会 OpenSL 开辟的根基流程,利用OpenSL播放PCM数据,并领会相关API的简单利用

  • Android OpenSL ES 开辟:Android OpenSL 先容和开辟流程说明
  • Android OpenSL ES 开辟:利用 OpenSL 播放 PCM 数据
  • Android OpenSL ES 开辟:Android OpenSL 录制 PCM 音频数据
  • Android OpenSL ES 开辟:OpenSL ES操纵SoundTouch实现PCM音频的变速和变调
    这一部分主如果脱手理论,堆集实战经历,可以试试给自己定以下方针:
  • 利用 OpenGL 显现一张图片
  • GLSurfaceviw 绘制 Camera 预览画面及实现摄影
  • 利用OpenGL ES 完成视频的录制,并实现视频水印结果


  • Android OpenGL ES 开辟(一): OpenGL ES 先容
  • Android OpenGL ES 开辟(二): OpenGL ES 情况搭建
  • Android OpenGL ES 开辟(三): OpenGL ES 界说外形
  • Android OpenGL ES 开辟(四): OpenGL ES 绘制外形
  • Android OpenGL ES 开辟(五): OpenGL ES 利用投影和相机视图
  • Android OpenGL ES 开辟(六): OpenGL ES 增加活动结果
  • Android OpenGL ES 开辟(七): OpenGL ES 响应触摸事务
  • Android OpenGL ES 开辟(八): OpenGL ES 着色器说话GLSL
  • Android OpenGL ES 开辟(九): OpenGL ES 纹理贴图
  • Android OpenGL ES 开辟(十): 经过GLES20与着色器交互
  • ……

音视频高级探讨https://0a.fit/BzPVh

  • 深入进修音视频编码,如H.264,AAC,研讨利用开源编解码库,如x.264,JM 等
  • 深入研讨音视频相关的收集协议,如 rtmp,hls,以及封包格式,如:flv,mp4
  • 深入进修一些音视频范畴的开源项目,如 webrtc,ffmpeg,ijkplayer,librtmp 等等
  • 将 ffmpeg 库移植到 Android 平台,连系上面堆集的经历,编写一款简易的音视频播放器
  • 将 x264 库移植到 Android 平台,连系上面堆集的经历,完成视频数据 H264 软编功用
  • 将 librtmp 库移植到 Android 平台,连系上面堆集的经历,完成 Android RTMP 推流功用

音视频编解码技术https://0a.fit/BzPVh



  • 音视频编解码技术(一):MPEG-4/H.264 AVC 编解码标准
  • 音视频编解码技术(二):AAC 音频编码技术
  • ……

流媒体协议



  • 流媒体协议(一):HLS 协议
  • 流媒体协议(二):RTMP协议
  • ……

多媒体文件格式https://0a.fit/BzPVh



  • 多媒体文件格式(一):MP4 格式
  • 多媒体文件格式(二):FLV 格式
  • 多媒体文件格式(三):M3U8 格式
  • 多媒体文件格式(四):TS 格式
  • 多媒体文件格式(五):PCM / WAV 格式
  • ……

FFmpeg 进修https://0a.fit/BzPVh



  • FFmpeg号令行工具进修(一):检察媒体文件头信息工具ffprobe
  • FFmpeg号令行工具进修(二):播放媒体文件的工具ffplay
  • FFmpeg号令行工具进修(三):媒体文件转换工具ffmpeg
  • FFmpeg号令行工具进修(四):FFmpeg 收集装备
  • FFmpeg号令行工具进修(五):FFmpeg 调剂音视频播放速度
  • ……


  • FFmpeg 进修(一):FFmpeg 简介
  • FFmpeg 进修(二):Mac下安装FFmpeg
  • FFmpeg 进修(三):将 FFmpeg 移植到 Android平台
  • FFmpeg 进修(四):FFmpeg API 先容与通用 API 分析
  • FFmpeg 进修(五):FFmpeg 编解码 API 分析
  • FFmpeg 进修(六):FFmpeg 焦点模块 libavformat 与 libavcodec 分析
  • ……


  • FFmpeg 结构体进修(一):AVFormatContext 分析
  • FFmpeg 结构体进修(二):AVStream 分析
  • FFmpeg 结构体进修(三):AVPacket 分析
  • FFmpeg 结构体进修(四):AVFrame 分析
  • FFmpeg 结构体进修(五):AVCodec 分析
  • FFmpeg 结构体进修(六):AVCodecContext 分析
  • FFmpeg 结构体进修(七):AVIOContext 分析
  • FFmpeg 结构体进修(八):FFMPEG中重要结构体之间的关系
  • ……


  • FFmpeg 开辟之 AVFilter 利用流程总结
  • FFmpeg 过期 Api 汇总整理
  • ……
音视频进修有着一定门坎,光看是绝对做不到精通音视频的,只要一步一步堆集,顺着正确的偏向不竭深入进修,才可以做到更好~:https://0a.fit/BzPVh

高端人脉微信群

高端人脉微信群

人脉=钱脉,我们相信天下没有聚不拢的人脉,扫码进群找到你所需的人脉,对接你所需的资源。

商业合作微信

商业合作微信

本站创始人微信,13年互联网营销经验,擅长引流裂变、商业模式、私域流量,高端人脉资源丰富。

精彩点评

相关推荐

详解RTSP推流实战(1)

详解RTSP推流实战(1)

0.引言本篇文章主要讲解RTSP推流实战,整体推流流程与RTMP推流流程类似。如果对于RTSP

视频号推流直播是什么?怎么玩?(附最全操作流程!)

视频号推流直播是什么?怎么玩?(附最全操作流程!)

随着视频号直播的不断完善,美颜、抽奖、推流直播等功能纷纷上线,【附近的直播和人】

抖音直播间推流机制是什么?怎么做能让直播间一直有流量 ... ...

抖音直播间推流机制是什么?怎么做能让直播间一直有流量 ... ...

很多人直播间没有人,就是因为搞不懂抖音直播间推流机制。不明白推流机制就找不到正确

python利用ffmpeg进行rtmp推流直播

python利用ffmpeg进行rtmp推流直播

思路:opencv读取视频 — 将视频分割为帧 — 将每一帧进行需求加工后 — 将此帧写入pi

OBS推流如何实现多平台推流

OBS推流如何实现多平台推流

500强直播策划,策划过多起直播。经常会遇到需要全平台推流的情况,但是OBS的原生软件

这篇微头条是3个月前写的,最近几天被再次推流,它有何特别之处

这篇微头条是3个月前写的,最近几天被再次推流,它有何特别之处

#头条文章养成计划#根据我400多天创作的亲身体验,文章推荐的时间比较长,而微头条的

头条的推流机制,原来是这样的

头条的推流机制,原来是这样的

#头条创作挑战赛#头条推流的机制是怎样的?在头条写作了31天,小编一直被这个问题困扰

在电脑上使用OBS在各大平台 直播 推流的方法

在电脑上使用OBS在各大平台 直播 推流的方法

Open Broadcaster Software(简称 OBS)是一款好用的第三方开源程序直播流媒体内容制

视频和视频帧:ffmpeg的RTMP推流

视频和视频帧:ffmpeg的RTMP推流

写在前面本文将介绍以下内容:什么是推流?将介绍推流常见的协议RTMP,HLS等。怎么用f

西瓜媒体直播教程:30秒学会推流直播

西瓜媒体直播教程:30秒学会推流直播

头条直播换到西瓜后台啦! 推流还是一样方便快捷! 功能更多更

视频号如何推流直播?推流直播详细教程

视频号如何推流直播?推流直播详细教程

​最近有很多同学问我视频号推流直播怎么做,这种三两句话回答不清楚,今天特意写了详

推流与拉流简概

推流与拉流简概

推流:将直播内容推送至服务器的过程拉流:为服务器已有直播内容,用指定地址进行拉取

一篇文章突然停止推流,我只做了2件事,结果收益200元

一篇文章突然停止推流,我只做了2件事,结果收益200元

我是依伊,一个全职写作的创作人,点击右上角关注,为你分享【新媒体写作变现】和【个

OBS直播多平台同时推流解决方法,简单粗暴

OBS直播多平台同时推流解决方法,简单粗暴

用OBS作为电脑直播推流,是很多人使用的一款开源软件。我们使用OBS时,它默认的是只能

3分钟带你了解抖音推流机制!

3分钟带你了解抖音推流机制!

你是否也遇到过辛辛苦苦拍了视频,但结果却还不如跳舞的小姐姐?为什么别人随便拍的视

千万级直播运营必须掌握的OBS推流直播技能

千万级直播运营必须掌握的OBS推流直播技能

专业直播操盘手必须掌握的OBS推流直播技能私域直播母東東,业绩增长分分钟Hello,各位

如何获取抖音直播的推流地址?

如何获取抖音直播的推流地址?

想在直播间中直播游戏,那就需要用到2个东西,分别是推流码和obs软件。那抖音直播推流

视频号问题系列(一):视频号如何开通推流直播

视频号问题系列(一):视频号如何开通推流直播

缘起: 最近工作比较忙、文章也没怎么更新,不过最近 一段时间过来问我视频号问题的朋

玩转直播,直播推流软件你选对了吗?

玩转直播,直播推流软件你选对了吗?

随着近几年互联网技术高速发展,人们对社交形式多样化的需求不断增加,从一开始的文字

直播推流和拉流方法-VLC 播放器专题

直播推流和拉流方法-VLC 播放器专题

直播目前处于一个风口期,很多直播开始跨平台跨地域直播,如何实现异地直播,跨平台直

商业洽谈 文章投递 寻求报道
电话咨询: 15924191378
关注微信