WebRTC Opus编码器的创建与参数细节分析( sdp -> native )

这几天在做一些WebRTC音频改进方面的调查工作,在阅读Chromium源码的过程中,就顺便记录下来,便于日后回顾。本文基于Chromium 85源码分析,由于Chromium的快速发展,很有可能不适合于跨度太大的Chromium版本。

大家知道Opus内置了两种编码器:CELT和SILK,并且可以针对采样率、采样间隔、码率、通道数……等属性进行设置。创建的参数设置,是从sdp来的。本文的主要目的,是来看看sdp中的信息,是如何对应到native世界里的代码的。

Native调用序列:

上图中,我保留的起点是从http://channel.cc中的VoiceChannel::SetRemoteContent_w() 方法被调用开始的,再往上的调用栈就没有画了。整个序列中,需要关注的主要是 AudioEncoderOpusImpl 的 SdpToConfig 和 RecreateEncoderInstance 这两个方法。

SdpToConfig,顾名思义,它会把sdp的内容(SdpAudioFormat)转换成 AudioEncoderOpusConfig 对象。AudioEncoderOpusConfig类的头文件件位于:webrtc\api\audio_codecs\opus\audio_encoder_opus_config.h。它定义了十几个Opus的相关属性,如采样率sample_rate_hz、帧长度frame_size_ms、通道数num_channels、音频模式application(决定内部编码使用celt还是silk)、fec_enabled、cbr_enabled……等等。

OK,接下来,让我们拿一个具体的例子来展开说明。假设SDP中音频部分是这样:

m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 110 112 113 126

c=IN IP4 0.0.0.0

a=rtcp:9 IN IP4 0.0.0.0

a=ice-ufrag:d3VL

a=ice-pwd:5ccIbts7ExcJCOlQXdRs+lzp

a=ice-options:trickle

a=fingerprint:sha-256 67:E5:3E:05:AC:F4:CE:56:06:4B:7B:74:AB:DA:92:D2:CE:88:1E:2E:78:13:49:69:EA:F3:2B:A0:BB:04:40:DA

a=setup:actpass

a=mid:audio

a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level

a=extmap:2 http://www.webr

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你提到的是视频流传输协议和对应的视频封装格式,其中: - MMS(Microsoft Media Server)是微软开发的流媒体传输协议,可以传输音频、视频和其他多媒体数据。MMS流可以保存为WMV(Windows Media Video)或ASF(Advanced Systems Format)格式文件。 - RTSP(Real-Time Streaming Protocol)是一种实时流媒体传输协议,通常用于 IP 网络上的音频、视频和其他多媒体流传输。RTSP流可以保存为RMVB(RealMedia Variable Bitrate)或RM(RealMedia)格式文件。 - RTMP(Real-Time Messaging Protocol)是一种实时流媒体传输协议,通常用于通过 Flash 插件在 Web 上播放音频、视频和其他多媒体流。RTMP流可以保存为F4V(Flash Video)或FLV(Flash Video)格式文件,也可以以 SWF(Shockwave Flash)格式嵌入到网页中。 - HLS(HTTP Live Streaming)是一种基于 HTTP 协议的流媒体传输协议,可以实现多码率自适应流媒体播放。HLS流可以保存为MP4(MPEG-4 Part 14)、MKV(Matroska Multimedia Container)或MOV(Apple QuickTime)格式文件。 - MPEG-DASH(Dynamic Adaptive Streaming over HTTP)是一种基于 HTTP 协议的自适应流媒体传输协议,可以实现多码率自适应流媒体播放。MPEG-DASH流可以保存为H.264(Advanced Video Coding)和AAC(Advanced Audio Coding)编码的MP4格式文件。 - WebRTC(Web Real-Time Communication)是一种实时通信技术标准,包括音频、视频、数据传输等。WebRTC可用于实现视频聊天软件和视频会议等功能,对应的视频格式取决于具体的实现方式。 需要注意的是,上述流传输协议和封装格式只是其中的一部分,实际上还有很多其他的协议和格式可供选择。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值