mediasoup 相关编译

### mediasoup编译及注意事项


Mediasoup c++ demo编译总体流程为 webrtc -> mediasoup-demo -> Mediasoup-broadcaster-demo

整体流程参考文档: https://www.jianshu.com/p/00cc45ea4620

Webrtc

地址:https://webrtc.googlesource.com/src.git

参考文档: https://mediasoup.org/documentation/v3/libmediasoupclient/installation/


$ mkdir -p /data/webrtc

$ cd /data/webrtc

# 检出depot_tools工具

$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

# 获取webrtc源码,同时会拉取依赖

$ fetch --nohooks webrtc

$ cd src

# 切换到m94分支

$ git checkout -b m94 refs/remotes/branch-heads/4606

# 获取m94分支最近一次的提交记录时间点

$ COMMIT_DATE=$(git log -n 1 --pretty=format:%ci)

# 更改depot_tools工具到和webrtc分支m94比较靠近的时间点

$ cd ../depot_tools

# Check out depot_tools revision from the same time:

$ git checkout $(git rev-list -n 1 --before="$COMMIT_DATE" main)

# 不更新depot_tools版本

$ export DEPOT_TOOLS_UPDATE=0

# 切换到webrtc编译目录

$ cd ../src

# 这里主要是runhook,视网络情况耗时可能比较长

$ gclient sync

# 编译参数设定, 输出在out/m94目录

$ gn gen out/m94 --args='is_debug=false is_component_build=false is_clang=false rtc_include_tests=false rtc_use_h264=true use_rtti=true use_custom_libcxx=false treat_warnings_as_errors=false use_ozone=true'

# 开始编译

$ ninja -C out/m94


关于头文件提取:

native-api的说明: https://webrtc.googlesource.com/src/+/HEAD/native-api.md

注意:需要在gclient sync同步完成后执行脚本, 因为有些依赖不在webrtc仓库中,而在第三方依赖中。

创建一个空目录, 将下面脚本复制并执行, 注意可能需要修改webrtc_path为实际的webrtc的目录



#!/bin/bash

#

webrtc_path="/data/webrtc/src"

cp -a ${webrtc_path}/api .

find api -type f  -name "*.cc" -delete

find api -type f  -name "*.gn" -delete

base_dir_lists=(

"common_audio/include"

"media/base"

"media/engine"

"modules/audio_coding/include"

"modules/audio_device/include"

"modules/audio_processing/include"

"modules/congestion_controller/include"

"modules/include"

"modules/rtp_rtcp/include"

"modules/rtp_rtcp/source"

"modules/utility/include"

"modules/video_coding/codecs/h264/include"

"modules/video_coding/codecs/vp8/include"

"modules/video_coding/codecs/vp9/include"

"modules/video_coding/include"

"pc"

"rtc_base"

"system_wrappers/include"

)

for i in ${base_dir_lists[@]}

do

  mkdir -p ${i}

  cp -f ${webrtc_path}/${i}/*.h ${i}/

done

for r in $(seq 10)

do

  echo "round ========= ${r} =========="

  for i in $(grep -r '^#include' |awk '{print $2}' |grep -v '<' |tr -d '"' |grep -v '^api/' |grep -v '^\.\.' |sort |uniq)

  do

    #echo "file: ${i}, dir:$(dirname ${i}), name: $(basename ${i})"

    if [[ -e ${i} || $(dirname ${i}) == '.' ]]; then

      continue

    fi

    echo ${i}

    for j in $(find ${webrtc_path} -name "$(basename ${i})")

    do

      if echo ${j} |grep -q "${i}"; then

        mkdir -p $(dirname ${i})

        cp ${j} $(dirname ${i})/

      fi

    done

  done

done


可选操作步骤(和上面编译操作互斥, 只需要选一个执行):

不使用fetch命令下载源码, 通过手动下载并设定指定分支, 然后通过gclient sync进行依赖同步



mkdir -p /data/webrtc

cd /data/webrtc

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

git clone https://webrtc.googlesource.com/src.git

export PATH=/data/webrtc/depot_tools:$PATH

gclient config --name src --unmanaged  https://webrtc.googlesource.com/src.git

cd /data/webrtc/src

git fetch origin +refs/branch-heads/*:refs/remotes/branch-heads/*

git checkout -b m94 refs/remotes/branch-heads/4606

COMMIT_DATE=$(git log -n 1 --pretty=format:%ci)

cd /data/webrtc/depot_tools

git checkout $(git rev-list -n 1 --before="$COMMIT_DATE" main)

export DEPOT_TOOLS_UPDATE=0

cd /data/webrtc/src

gclient sync --no-history

gn gen out/m94 --args='is_debug=false is_component_build=false is_clang=false rtc_include_tests=false rtc_use_h264=true use_rtti=true use_custom_libcxx=false treat_warnings_as_errors=false use_ozone=true'

ninja -C out/m94



libmediasoupclient (可选)

下面步骤的Mediasoup-broadcaster-demo自带编译了libmediasoupclient依赖, 所以这项不是必须, 仅用作检验Webrtc编译是否正常



$ cd /data/webrtc

$ git clone https://github.com/versatica/libmediasoupclient.git

# 具体是否切换分支视情况而定, 一般情况就是v3, 不需要切换

$ cd libmediasoupclient

$ cmake . -Bbuild -DLIBWEBRTC_INCLUDE_PATH:PATH=/data/webrtc/src -DLIBWEBRTC_BINARY_PATH:PATH=/data/webrtc/src/out/m94/obj

$ make -C build/



mediasoup-demo

mediasoup-demo是基于nodejs的, 依赖nodejs 版本 >= v16.0.0。

下一步操作的Mediasoup-broadcaster-demo需要依赖这里的服务端;

同时mediasoup-demo的客户端打开web浏览器页面可以提供一个roomid给下一步mediasoup-broadcaster-demo使用

具体流程可以参考官方github文档: https://github.com/versatica/mediasoup-demo




$ cd /data/webrtc

$ git clone https://github.com/versatica/mediasoup-demo.git

$ cd mediasoup-demo

$ git checkout v3

# 服务端编译:

$ cd /data/webrtc/mediasoup-demo/server

$ npm --registry=https://registry.npmmirror.com install

# 客户端编译:

$ cd /data/webrtc/mediasoup-demo/app

# For node 16

$ npm --registry=https://registry.npmmirror.com install

# For node 18, use legacy peer dependencies

$ npm --registry=https://registry.npmmirror.com install --legacy-peer-deps 

# 服务端本地运行:

$ cd /data/webrtc/mediasoup-demo/server

$ cp config.example.js config.js

# 运行服务端需要提供一个证书密钥对:fullchain.pem 和 privkey.pem

# 运行前需要确保webRtcServerOptions和webRtcTransportOptions地址正确,否则可能出现无画面情况

$ npm start

# 客户端本地运行(新开一个窗口):

$ cd /data/webrtc/mediasoup-demo/app

$ npm start




最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,039评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,223评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,916评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,009评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,030评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,011评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,934评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,754评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,202评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,433评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,590评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,321评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,917评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,568评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,738评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,583评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,482评论 2 352

推荐阅读更多精彩内容