前言

SRS4.0支持将RTMP流转换成RTC流,本文将结合源码分析下这个过程。

配置

首先,需要在SRS4.0的启动配置文件里面开启RTC ServerRTC 能力,可以参考官方提供的配置文件./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

  • 创建rtmp2rtcbridger SrsRtcFromRtmpBridger用于将rtmp的音视频packet转封装成rtc需要的packet。将前面创建的SrsRtcSource实例传递到bridger中,并且初始化bridger, 随后将该bridger注册到管理一路rtmp流的SrsLiveSource实例中。

  • bridger初始化,在bridger的初始化函数分别初始化了SrsRtmpFormatSrsAudioTransCoder实例,SrsRtmpFormat实例用于解析rtmp流的音视频tagSrsAudioTransCoder实例用于将音频编码格式转换成webrtc需要的opus格式。

  • 接下来看下SrsLiveSource里面是怎么调用bridger的,SrsLiveSource主要在四个地方调用了bridger。将音视频包透传到bridger中,将[un]publish状态传递到bridger中。

    • on_publish,在SrsLiveSourceon_publish函数中会调用bridgeron_publish函数,而bridger的会做一些逻辑校验以及调用SrsRtcSourceon_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的流程包括:首先创建一个rtmp2rtcbridger,这个bridger包含一个管理rtc流的SrsRtcSource实例, 将这个briger注册到管理rtmp流的SrsLiveSource实例中,SrsLiveSource收到的所有rtmp tag都将投递一份到这个bridger,这个bridger负责将rtmp tag数据解析和转码(AAC2OPUS),并且按照配置打包成rtp packet投递到SrsRtcSource中。

SRS源码分析-rtmp转rtc流程相关推荐

  1. HDFS源码分析DataXceiver之整体流程

    在<HDFS源码分析之DataXceiverServer>一文中,我们了解到在DataNode中,有一个后台工作的线程DataXceiverServer.它被用于接收来自客户端或其他数据节 ...

  2. srs源码分析3-srs的启动

    本文分析的srs版本是0.6.0 srs源码分析1-搭建环境 srs源码分析2-浅析state_threads srs源码分析3-srs的启动 srs源码分析4-客户端的连接 srs源码分析5-han ...

  3. Fuchsia源码分析--系统调用流程

    Fuchsia源码分析--系统调用流程 以zx_channel_create为例 Fuchsia系统调用的定义 Fuchsia系统调用定义文件的编译 Fuchsia系统调用用户空间的调用流程 zx_c ...

  4. SRS4.0源码分析-RTMP入口

    本文采用的 SRS 版本是 4.0-b8 , 下载地址:github 上篇文章 <SRS4.0源码分析-main> 讲解了 SRS main 函数的基本流程,但是可能有些朋友还是比较懵逼. ...

  5. [Abp vNext 源码分析] - 1. 框架启动流程分析

    一.简要说明 本篇文章主要剖析与讲解 Abp vNext 在 Web API 项目下的启动流程,让大家了解整个 Abp vNext 框架是如何运作的.总的来说 ,Abp vNext 比起 ABP 框架 ...

  6. 源码分析Dubbo服务提供者启动流程-下篇

    本文继续上文Dubbo服务提供者启动流程,在上篇文章中详细梳理了从dubbo spring文件开始,Dubbo是如何加载配置文件,服务提供者dubbo:service标签服务暴露全流程,本节重点关注R ...

  7. 源码分析Dubbo服务提供者启动流程-上篇

    本节将详细分析Dubbo服务提供者的启动流程,请带着如下几个疑问进行本节的阅读,因为这几个问题将是接下来几篇文章分析的重点内容.  1.什么时候建立与注册中心的连接.  2.服务提供者什么时候向注册中 ...

  8. F2FS源码分析-5.2 [数据恢复流程] 后滚恢复和Checkpoint的作用与实现

    F2FS源码分析系列文章 主目录 一.文件系统布局以及元数据结构 二.文件数据的存储以及读写 三.文件与目录的创建以及删除(未完成) 四.垃圾回收机制 五.数据恢复机制 数据恢复的原理以及方式 后滚恢 ...

  9. Android结合源码分析Power按键处理流程

    这是之前团队进行技术交流时,我选择的一个主题,那段时间解决power锁屏按键的bug,搞得头大,所以借此机会结合Android8.0源码去分析Power键的处理流程,也将此分享出来,希望对大家有所帮助 ...

最新文章

  1. python 爬虫实例-Python 爬虫:Scrapy 实例(二)
  2. 一道有趣的C#考试题目
  3. java怎么添加地图_javaweb怎样添加百度地图
  4. php文件目录操作相关
  5. eclipse远程连接hadoop_1个文件,3个类,mapreduce就是这么简单,动手搭建Hadoop(8)...
  6. android mqtt详解_Android mqtt入门 Android studio(转)
  7. 科学技术是对人类历史发展和现代国家兴亡起决定作用的一种力量
  8. pyinstaller下载_《快速掌握PyQt5》第二十五章 Pyinstaller打包
  9. 推理速度快千倍!谷歌开源语言模型Transformer-XL
  10. 学会了 C 语言真的可以开发出很多东西吗?
  11. Spark入门到精通
  12. 路由器的两种工作模式
  13. 写给四年前刚开始编程的自己
  14. 遥感数据集的下载记录——MODIS产品为主
  15. Android 全屏悬浮窗适配(悬浮窗沉浸式)
  16. 更好哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
  17. flink学习笔记(五)
  18. 【学习 记录】狄克斯特拉算法 - Java
  19. Particle Builder Elemental Pack for Mac(ae粒子特效模板)
  20. Python必学知识

热门文章

  1. 全世界顶尖黑客排名!
  2. Office如何设置主题颜色/主题色
  3. idea 下载插件慢
  4. oppo和海康嵌入式软件工程师面经总结
  5. 使用总结——markdown用法
  6. 2022Android大厂面试真题,新鲜出炉的蚂蚁金服面经
  7. 解决高度塌陷:万能清除法
  8. AEJoy —— 三分钟了解 AE 相关的颜色空间和颜色管理
  9. windows查看HEIC文件,HEIC转换JPG
  10. 测试not_in_vstar_and_v3(mate)_(e_t)_no_tec_rec