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

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

第一章 从源码到demo应用


写在开头:

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

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

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

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


文章目录

  • yangrtc/(又名metaRTC)源码分析(一)
  • 前言
  • 一、从何入手?
  • 二、源码目录
    • 1.目录结构
    • 2.如何切入
    • 3.大胆尝试
    • 4.小结


前言

项目背景

webrtc的媒体服务器使用的是srs(http://ossrs.net/releases/),前端推送webrtc流到媒体服务器SRS,后端从SRS服务器拉取webrtc流,使用yangrtc库。随机使用privite协议发送给我们的smart device;
2022-3-12 【webrtc应用】yangrtc/metaRTC开源库源码分析(一)_第1张图片


下面是如何实现拉取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 ”版本,解压后的结构是这样的:
2022-3-12 【webrtc应用】yangrtc/metaRTC开源库源码分析(一)_第2张图片

具体的目录说明如下:

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

2.如何切入

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

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

3.大胆尝试

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

通过归纳总结,我明白了以上几个步骤,对代码做了一些小改动,只提取关键步骤,目的验证我的思路正确;
2022-3-12 【webrtc应用】yangrtc/metaRTC开源库源码分析(一)_第10张图片
通过简单的创建上下文对象、初始化、创建缓存、创建播放实例、调用播放…之后,程序能够正常拉取webrtc流并且播放出了音频(由于我没有处理视频相关的代码,只能播放出音频)。

4.小结

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

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

  • 我常说,有本事用数据说话,开发这类程序,必须要抓包,结合抓包数据分析流程;
  • 从demo中可以看到,YangPlayerHandle播放实例的,paly 和stopplay是流程的关键函数,应该分别从这两个角度出发,理解程序的工作流程。

你可能感兴趣的:(通信系统与音视频开发,webrtc相关,webrtc,音视频,yangrtc,metaRTC,C/C++,流媒体)