yangrtc/(又名metaRTC)源码分析(二)
接第一篇内容,分析一下play函数的大致业务流程;
同时分享一种 “
如何将yangrtc接收解码后音频数据进行二次利用
”的方法?
前言
开门见山:
- 分析源码play函数connectRtcServer;
- 改造代码,使得自己能够单独取出音频数据(PS:这个需求应该非常通用)
一、分析源码play函数之connectRtcServer
-
关键函数palyRtc,从下图中可以看到,在demo调用play之后做了“解析URL”、“设置媒体类型”、“playRTC”三步操作:
-
关键在于playRtc,可以看到SRS默认的端口1985也是在这个地方,如果需要后期改成可配,就在这个地方改造,下图展示了playRtc执行的步骤:
-
m_rtcRecv->start()函数运行了线程(执行了run 函数),m_rtcRecv的类是
YangPlayerHandleImpl
;
-
看下run线程函数体内,执行了什么?执行了 StartLoop
-
接下来看下,connectRtcServer之后,里面执行了什么?
-
看下m_udp执行start函数,流程和上面差不多,具体看下图;
-
关键需要继续查找这个m_udp的类,它也是继承自YangThread,看看override的run函数到底执行了什么?
- 以上为止,跟踪到了代码中,接收数据recvform函数,此函数接收UDP数据包;完成与服务器的连接以及交互。
分享一种截取解码后音频数据的方法
这种需求,用于webrtc对接数据流之后,进行二次改造
我这边只给出切入点:
关键在于这里面的“YangAudioDecoderOpus.cpp”;由于前端与库之间,协商的webrtc中音频流格式为opus,48000,双声道,最终解码后得到PCM原始数据,其关键切入点在:
通过对这段代码的改造,可以实现我们的目标需求,如下所示:
具体的改造代码实现,可以私聊本人寻求帮助。
版权声明:本文为shayueqing原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。