2022-04-03 【webrtc应用】yangrtc/metaRTC开源库源码分析(二)

  • Post author:
  • Post category:其他




yangrtc/(又名metaRTC)源码分析(二)

接第一篇内容,分析一下play函数的大致业务流程;

同时分享一种 “

如何将yangrtc接收解码后音频数据进行二次利用

”的方法?





前言

开门见山:

  1. 分析源码play函数connectRtcServer;
  2. 改造代码,使得自己能够单独取出音频数据(PS:这个需求应该非常通用)



一、分析源码play函数之connectRtcServer

  1. 关键函数palyRtc,从下图中可以看到,在demo调用play之后做了“解析URL”、“设置媒体类型”、“playRTC”三步操作:

    在这里插入图片描述
  2. 关键在于playRtc,可以看到SRS默认的端口1985也是在这个地方,如果需要后期改成可配,就在这个地方改造,下图展示了playRtc执行的步骤:

    在这里插入图片描述
  3. m_rtcRecv->start()函数运行了线程(执行了run 函数),m_rtcRecv的类是


    YangPlayerHandleImpl




    在这里插入图片描述
  4. 看下run线程函数体内,执行了什么?执行了 StartLoop

    在这里插入图片描述

    在这里插入图片描述
  5. 接下来看下,connectRtcServer之后,里面执行了什么?

    在这里插入图片描述
  6. 看下m_udp执行start函数,流程和上面差不多,具体看下图;

    在这里插入图片描述
  7. 关键需要继续查找这个m_udp的类,它也是继承自YangThread,看看override的run函数到底执行了什么?

    在这里插入图片描述
  8. 以上为止,跟踪到了代码中,接收数据recvform函数,此函数接收UDP数据包;完成与服务器的连接以及交互。



分享一种截取解码后音频数据的方法


这种需求,用于webrtc对接数据流之后,进行二次改造

我这边只给出切入点:

在这里插入图片描述

关键在于这里面的“YangAudioDecoderOpus.cpp”;由于前端与库之间,协商的webrtc中音频流格式为opus,48000,双声道,最终解码后得到PCM原始数据,其关键切入点在:

在这里插入图片描述

通过对这段代码的改造,可以实现我们的目标需求,如下所示:

在这里插入图片描述

具体的改造代码实现,可以私聊本人寻求帮助。



版权声明:本文为shayueqing原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。