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

本文详细解读YangRTC play函数的业务流程,涉及connectRtcServer和接收解码音频数据。分享一种实用技巧,教你如何从webrtc解码后的音频中提取并二次利用。关键代码片段在YangAudioDecoderOpus中,适合进行音频处理定制。

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原始数据,其关键切入点在:
在这里插入图片描述
通过对这段代码的改造,可以实现我们的目标需求,如下所示:
在这里插入图片描述

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

<think>根据用户的问题和之前的对话历史,用户希望在使用Docker运行webrtc-streamer容器时,将本地的配置文件挂载到容器中。具体来说,用户当前的命令是:dockerrun-d--networkhost--namewebrtc-streamermpromonet/webrtc-streamer现在需要将本地路径/usr/local/webrtc/config.json挂载到容器内的指定路径(根据之前的引用[1],容器内路径是/usr/local/share/webrtc-streamer/config.json)。步骤:1.使用`-v`或`--volume`参数进行挂载。基本格式为:`-v<宿主机路径>:<容器内路径>`2.在命令中添加挂载参数:`-v/usr/local/webrtc/config.json:/usr/local/share/webrtc-streamer/config.json`因此,完整的命令变为:dockerrun-d--networkhost--namewebrtc-streamer-v/usr/local/webrtc/config.json:/usr/local/share/webrtc-streamer/config.jsonmpromonet/webrtc-streamer注意:-如果本地配置文件不存在,Docker会将其视为一个文件并尝试创建,但可能为空,导致容器内应用读取配置失败。因此,请确保宿主机上的配置文件存在。-容器内的路径由镜像定义,这里我们使用了引用[1]中提到的路径:`/usr/local/share/webrtc-streamer/config.json`。此外,用户之前提到在NAT后使用嵌入式STUN/TURN服务器,这通常需要在配置文件中设置。挂载后,容器内的应用将使用用户提供的配置文件。生成相关问题:1.如何验证Docker容器内的配置文件是否被正确加载?2.除了配置文件,如何将整个目录挂载到Docker容器中?3.如果Docker容器运行失败,如何查看日志来调试?</think> ### 在 Docker 命令中挂载本地配置文件到 webrtc-streamer 容器 要解决您的问题,需要在原有命令基础上添加 **`-v` 卷挂载参数**,语法为: ```bash -v /宿主机/路径:/容器内/路径:选项 ``` #### 完整的 Docker 运行命令: ```bash docker run -d \ --network host \ --name webrtc-streamer \ -v /usr/local/webrtc/config.json:/usr/local/share/webrtc-streamer/config.json:ro \ mpromonet/webrtc-streamer ``` #### 关键参数说明: 1. **`-v` 挂载参数**: - `/usr/local/webrtc/config.json` ➔ 宿主机配置文件路径 - `/usr/local/share/webrtc-streamer/config.json` ➔ 容器内目标路径(标准路径参考镜像文档 [^1]) - `:ro` 表示 *read-only*(容器对该文件只有读权限) 2. **`--network host`**: - 保持主机网络模式,无需端口映射(原 `-p` 参数已移除) 3. **配置文件验证**: ```bash # 检查容器是否加载配置文件 docker exec webrtc-streamer ls -l /usr/local/share/webrtc-streamer/config.json # 查看配置是否生效(观察日志中的配置加载记录) docker logs webrtc-streamer | grep "config.json" ``` #### 技术原理说明: 当容器启动时,Docker 会建立宿主机与容器文件的双向绑定关系: - 宿主机文件路径 $$ f_{\text{host}} = \text{/usr/local/webrtc/config.json} $$ - 容器内路径 $$ f_{\text{container}} = \text{/usr/local/share/webrtc-streamer/config.json} $$ - 绑定关系满足:$$ f_{\text{host}} \xrightarrow{\text{映射}} f_{\text{container}} $$ --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ShaYQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值