2022-3-12 【webrtc应用】yangrtc/metaRTC开源库源码分析(一)

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

第一章 从源码到demo应用


写在开头:

  • 经过以往的学习和积累,webrtc的一般使用过程:如SDP信息的交换、Candidate消息的交换、服务器设定、音视频媒体传输等,都有了一定的了解。

  • 开发项目时,如果使用webrtc native api,编译复杂并且复杂程度较高,起初团队不知如何下手;

  • yangrtc/metaRTC的开源库,支持webrtc协议,并且代码量小,功能强大,值得研究。由于网上的资料比较少,我花了不少的时间,进行研究,并且最终为我团队所用;

  • 最后,感谢该开源库的作者,为大家做了不少的共享,真可谓“前人栽树后人乘凉”。我写文章的目的也是为了同大家分享开发经验,帮助大家一起进步,不足之处,还望指正。



前言

项目背景

webrtc的媒体服务器使用的是srs(http://ossrs.net/releases/),前端推送webrtc流到媒体服务器SRS,后端从SRS服务器拉取webrtc流,使用yangrtc库。随机使用privite协议发送给我们的smart device;
在这里插入图片描述


下面是如何实现拉取webrtc流的

一、从何入手?

  1. 下载源码,把主页上面的说明全部看一遍,然后按照相对应的说明进行编译和安装,这一步比较简单,将不再多说,附上地址:

    yangrtc/metaRTC库:https://toscode.gitee.com/metartc/yangwebrtc
    
    yangrtc编译教程:https://www.bilibili.com/video/BV1d3411r742/
    
    srs媒体服务器:http://ossrs.net
    

二、源码目录

1.目录结构

我下载的是“ metartc2_with_3rdparty.062 ”版本,解压后的结构是这样的:
在这里插入图片描述

具体的目录说明如下:

bin: 生成的debug和release版本exe\lib的路径;
include: 头文件路径
libyangrtc2: 核心的代码库
thirdparty: 所使用的第三方的开源库srtp\ssl等
yangplayer2: 拉流demo
yangpushstream2: 推流demo
yangwincodec: h264编码相关

2.如何切入

编译出yangplayer2这个demo之后,从代码层进行分析入手即可:

  1. main函数中,有四个步骤,即: 构造主窗口、构建RecordThread、初始化、启动线程;
    在这里插入图片描述
    2.先看主窗口,MainWindow主要绘制了界面,包含解码显示的widget以及必要的按钮button;实现从解码输入地址,传递一些参数,人为启动或停止;
    在这里插入图片描述
  2. 这个RecordThread,继承自QThread,其run函数中,主要执行了render方法;render方法是读取一个videoFrame,可以用作记录保存,果然与类名定义类似,哈哈。
    在这里插入图片描述
    在这里插入图片描述
  3. 初始化步骤,这个initpara函数是空的,并没有执行什么特殊操作,传递video控件也只是传递了widgret指针,这都可以理解。
    在这里插入图片描述
  4. 接上面初始化时,这个m_playBuffer必须要先创建,并且这个是关键,从mainwindow的构造函数中,可以找到下面的代码,可想而知这一步也是必须的。
    在这里插入图片描述
  5. 完事具备之后,有一个非常关键的操作,在点击mainwindow的paly按钮时,程序进入了以下事件处理函数,一个关键动作就是“paly”;
    6.

3.大胆尝试

实践总是检验真理的唯一标准,写程序亦是如此。

通过归纳总结,我明白了以上几个步骤,对代码做了一些小改动,只提取关键步骤,目的验证我的思路正确;
在这里插入图片描述
通过简单的创建上下文对象、初始化、创建缓存、创建播放实例、调用播放…之后,程序能够正常拉取webrtc流并且播放出了音频(由于我没有处理视频相关的代码,只能播放出音频)。

4.小结

这一次,熟悉了一下yangpalyer2的拉流源码,主要是清楚了如何调用的流程;我的想法就是以demo作为切入点,明确的知道主体的业务流程,对着业务流程再去分看代码。

下一篇,分析以下几个地方:

  • 我常说,有本事用数据说话,开发这类程序,必须要抓包,结合抓包数据分析流程;
  • 从demo中可以看到,YangPlayerHandle播放实例的,paly 和stopplay是流程的关键函数,应该分别从这两个角度出发,理解程序的工作流程。
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ShaYQ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值