美文网首页
webrtc远端音频回调导出

webrtc远端音频回调导出

作者: 大飞_2048 | 来源:发表于2019-08-25 19:59 被阅读0次

    概述

            该文档主要介绍webrtc移动端sdk代码关于音频远程调用导出修改。描述框架基础代码架构,由于涉及到webrtc原生的native封装性,这里需要在native层修改代码导出音频数据。

    一、webrtc端上代码实现结构

    按照使用功能分为3层:接口层,提供基本的peerconnetion 接口功能;控制层,主要是SDP 的解析和生成工作;传输层,提供媒体打包,传输,流控,安全,ICE 等功能。

    1,接口层

    PeerConnectionInterface  其实现类是PeerConnection提供webrtc对外提供的服务能力

    2、控制层

    所谓的控制层就是sdp模块层: sdp模块,包括编解码参数,流控方式,Dtls 加解密参数以及ICE穿透用的地址候选。

    3、传输层

    视频传输包括:媒体打包(RTP/RTCP),数据安全(DtlsTransport),Ice P2P 传输模块(IceTransport)

    二、涉及到基础类

    webrtc控制层是基本的关系类图表

    整理的基本关系

    webrtc基础类

    三、sdk音频导出

        如上图所示基础类自定义C接口AudioRendSink,添加音频导出类及实现。在AudioTrackInterface,实现类AudioTrack中添加AudioRendSink。这样就可以导出音频数据。

    1、ios实现 

      (1) sdk中业务调用层。音视频添加及删除方法添加:

               RTCAudioTrack.h

          /** Register a renderer that will render all frames received on this track. */

    - (void)addRenderer:(id)renderer;

        /** Deregister a renderer. */

    - (void)removeRenderer:(id)renderer;

    (2)sdk中mm调用AudioRendSink实现ios层和层代码切换调用

    namespacewebrtc {

        class AudioRenderAdapter //:public AudioSinkInterface{

        :publicwebrtc::AudioTrackSinkInterface {

        public:

            AudioRenderAdapter(RTCAudioRenderAdapter* adapter) {

                adapter_= adapter;

            }

            ~AudioRenderAdapter(){        }

            voidOnData(constvoid* audio_data,

                                intbits_per_sample,

                                intsample_rate,

                                size_tnumber_of_channels,

                                size_tnumber_of_frames){

                [adapter_.audioRender onAudioFrame:audio_data len:(number_of_frames*number_of_channels*bits_per_sample/2) bitsPerSample:bits_per_sample sampleRate:sample_rate channale:number_of_channels];

            }

        private:

            __weak RTCAudioRenderAdapter *adapter_;

        };

    }

    @implementationRTCAudioRenderAdapter {

        std::unique_ptr<webrtc::AudioRenderAdapter> _adapter;

    }

    @synthesizeaudioRender = _audioRender;

    - (instancetype)initWithNativeRenderer:(id)audioRender {

        NSParameterAssert(audioRender);

        if(self= [superinit]) {

            _audioRender = audioRender;

            _adapter.reset(newwebrtc::AudioRenderAdapter(self));

        }

        return self;

    }

    - (webrtc::AudioTrackSinkInterface *)nativeAudioRenderer {

        return_adapter.get();

    }

    (2) Android版本实现,

           原理一样

    具体代码实现,改的不多,如有需要,请留言。

    相关文章

      网友评论

          本文标题:webrtc远端音频回调导出

          本文链接:https://www.haomeiwen.com/subject/flgysctx.html