SRS源码分析-rtmp转rtc流程
前言
SRS4.0
支持将RTMP
流转换成RTC
流,本文将结合源码分析下这个过程。
配置
首先,需要在SRS4.0
的启动配置文件里面开启RTC Server
和RTC
能力,可以参考官方提供的配置文件./trunk/conf/rtmp2rtc.conf
,对应配置项如下:
RTC Server
配置:
rtc_server {enabled on;listen 8000; # UDP port# @see https://github.com/ossrs/srs/wiki/v4_CN_WebRTC#config-candidatecandidate $CANDIDATE;
}
RTC
配置,RTC
配置是在vhost
项下开启的
vhost __defaultVhost__ {rtc {enabled on;# @see https://github.com/ossrs/srs/wiki/v4_CN_WebRTC#rtmp-to-rtcrtmp_to_rtc on;# @see https://github.com/ossrs/srs/wiki/v4_CN_WebRTC#rtc-to-rtmprtc_to_rtmp on;}
}
源码分析
接下来具体分析下rtmp2rtc
的源码
在
SrsRtmpConn
类中的acquire_publish
方法中判断是否开启了rtc
功能,如果开启了,则会为该路流创建一个SrsRtcSource
实例,用来管理一路rtc
流
创建
rtmp2rtc
的bridger SrsRtcFromRtmpBridger
用于将rtmp
的音视频packet
转封装成rtc
需要的packet
。将前面创建的SrsRtcSource
实例传递到bridger
中,并且初始化bridger
, 随后将该bridger
注册到管理一路rtmp
流的SrsLiveSource
实例中。bridger
初始化,在bridger
的初始化函数分别初始化了SrsRtmpFormat
和SrsAudioTransCoder
实例,SrsRtmpFormat
实例用于解析rtmp
流的音视频tag
,SrsAudioTransCoder
实例用于将音频编码格式转换成webrtc
需要的opus
格式。接下来看下
SrsLiveSource
里面是怎么调用bridger
的,SrsLiveSource
主要在四个地方调用了bridger
。将音视频包透传到bridger
中,将[un]publish
状态传递到bridger
中。on_publish
,在SrsLiveSource
的on_publish
函数中会调用bridger
的on_publish
函数,而bridger
的会做一些逻辑校验以及调用SrsRtcSource
的on_publish
函数,并且清除meta(video/audio sequence header)
缓存
on_unpublish
,unpublish的处理逻辑和publish
的差不多,meta
数据不清除,并且缓存当前(video/audio sequence header
),代码如下,不再赘述
on_audio
处理逻辑bridger
通过on_audio
收到音频数据包时,通过SrsRtmpFormat
实例对音频数据进行解tag
和解封装,丢弃掉非AAC
编码的音频数据包,并且给AAC raw
数据增加ADTS
头
- 将增加
ATDS
头的音频数据保存到SrsAudioFormat
中,调用SrsAudioTranscoder
实例将AAC音频数据转码成OPUS音频数据,将转码后的音频数据打包成RTP packet
,透传给SrsRtcSource
。
on_video
处理逻辑bridger
首先判断视频数据是不是h264
序列头,如果是则缓存它
通过
SrsRtmpFormat
实例解析视频数据tag
和封装
过滤视频数据,根据配置过滤B帧,因为
RTC
不支持B
帧
对于
IDR
帧,首先按照rtp STAP-A
的打包方式打包SPS/PPS
数据递交到SrsRtcSource
如果开启了
merge nalu
,则将所有NALU
合并成一个NALU
,并且打包到一个RTP
或者FUA packet
中
未开启
merge nalu
,则一个NALU
对应一个RTP packet
,单个NALU
大于最大的RTP packet
负载(webrtc default: 1200
)则使用FUA packet
,打包完成后则投递到SrsRtcSource
中
总结
SRS4.0
rtmp2rtc
的流程包括:首先创建一个rtmp2rtc
的bridger
,这个bridger
包含一个管理rtc
流的SrsRtcSource
实例, 将这个briger
注册到管理rtmp
流的SrsLiveSource
实例中,SrsLiveSource
收到的所有rtmp tag
都将投递一份到这个bridger
,这个bridger
负责将rtmp tag
数据解析和转码(AAC2OPUS
),并且按照配置打包成rtp packet
投递到SrsRtcSource
中。
SRS源码分析-rtmp转rtc流程相关推荐
- HDFS源码分析DataXceiver之整体流程
在<HDFS源码分析之DataXceiverServer>一文中,我们了解到在DataNode中,有一个后台工作的线程DataXceiverServer.它被用于接收来自客户端或其他数据节 ...
- srs源码分析3-srs的启动
本文分析的srs版本是0.6.0 srs源码分析1-搭建环境 srs源码分析2-浅析state_threads srs源码分析3-srs的启动 srs源码分析4-客户端的连接 srs源码分析5-han ...
- Fuchsia源码分析--系统调用流程
Fuchsia源码分析--系统调用流程 以zx_channel_create为例 Fuchsia系统调用的定义 Fuchsia系统调用定义文件的编译 Fuchsia系统调用用户空间的调用流程 zx_c ...
- SRS4.0源码分析-RTMP入口
本文采用的 SRS 版本是 4.0-b8 , 下载地址:github 上篇文章 <SRS4.0源码分析-main> 讲解了 SRS main 函数的基本流程,但是可能有些朋友还是比较懵逼. ...
- [Abp vNext 源码分析] - 1. 框架启动流程分析
一.简要说明 本篇文章主要剖析与讲解 Abp vNext 在 Web API 项目下的启动流程,让大家了解整个 Abp vNext 框架是如何运作的.总的来说 ,Abp vNext 比起 ABP 框架 ...
- 源码分析Dubbo服务提供者启动流程-下篇
本文继续上文Dubbo服务提供者启动流程,在上篇文章中详细梳理了从dubbo spring文件开始,Dubbo是如何加载配置文件,服务提供者dubbo:service标签服务暴露全流程,本节重点关注R ...
- 源码分析Dubbo服务提供者启动流程-上篇
本节将详细分析Dubbo服务提供者的启动流程,请带着如下几个疑问进行本节的阅读,因为这几个问题将是接下来几篇文章分析的重点内容. 1.什么时候建立与注册中心的连接. 2.服务提供者什么时候向注册中 ...
- F2FS源码分析-5.2 [数据恢复流程] 后滚恢复和Checkpoint的作用与实现
F2FS源码分析系列文章 主目录 一.文件系统布局以及元数据结构 二.文件数据的存储以及读写 三.文件与目录的创建以及删除(未完成) 四.垃圾回收机制 五.数据恢复机制 数据恢复的原理以及方式 后滚恢 ...
- Android结合源码分析Power按键处理流程
这是之前团队进行技术交流时,我选择的一个主题,那段时间解决power锁屏按键的bug,搞得头大,所以借此机会结合Android8.0源码去分析Power键的处理流程,也将此分享出来,希望对大家有所帮助 ...
最新文章
- python 爬虫实例-Python 爬虫:Scrapy 实例(二)
- 一道有趣的C#考试题目
- java怎么添加地图_javaweb怎样添加百度地图
- php文件目录操作相关
- eclipse远程连接hadoop_1个文件,3个类,mapreduce就是这么简单,动手搭建Hadoop(8)...
- android mqtt详解_Android mqtt入门 Android studio(转)
- 科学技术是对人类历史发展和现代国家兴亡起决定作用的一种力量
- pyinstaller下载_《快速掌握PyQt5》第二十五章 Pyinstaller打包
- 推理速度快千倍!谷歌开源语言模型Transformer-XL
- 学会了 C 语言真的可以开发出很多东西吗?
- Spark入门到精通
- 路由器的两种工作模式
- 写给四年前刚开始编程的自己
- 遥感数据集的下载记录——MODIS产品为主
- Android 全屏悬浮窗适配(悬浮窗沉浸式)
- 更好哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
- flink学习笔记(五)
- 【学习 记录】狄克斯特拉算法 - Java
- Particle Builder Elemental Pack for Mac(ae粒子特效模板)
- Python必学知识
热门文章
- 全世界顶尖黑客排名!
- Office如何设置主题颜色/主题色
- idea 下载插件慢
- oppo和海康嵌入式软件工程师面经总结
- 使用总结——markdown用法
- 2022Android大厂面试真题,新鲜出炉的蚂蚁金服面经
- 解决高度塌陷:万能清除法
- AEJoy —— 三分钟了解 AE 相关的颜色空间和颜色管理
- windows查看HEIC文件,HEIC转换JPG
- 测试not_in_vstar_and_v3(mate)_(e_t)_no_tec_rec