webrtc入门系列(一)easy_webrtc_server 入门环境搭建

《webrtc入门系列(一)easy_webrtc_server 入门环境搭建》
《webrtc入门系列(二)easy_webrtc_server 入门example测试》
《webrtc入门系列(三)云服务器coturn环境搭建》
《webrtc入门系列(四) zlmediakit webrtc sdp交互详细解读》


一、背景

这年头,搞音视频的同学,要说自己不会webrtc,都不好意思出门了,所以,搞…
谷歌webRTC框架比较重,我擅长的又是设备端开发,最重要的是C++高级特性我不能说完全不懂吧,只能说一窍不通。
所以我开始选择了c语言为主开发的metaRTC想作为入门,搭环境接入到IPC,坑次坑次干了一个下午,发现demo都没跑起来。抓包一看,只走了第一步sdp交换,然后就没有然后了(晚上还干到凌晨看代码,然。。。)。虽然杨老师的代码回调比较多,对我来说没很大影响,但代码功能多可读性不高,不太适合作为自己的入门学习框架,想加两个看接入过海思的同学交流一下,奈何加了两位都未通过好友申请。
还是自己来吧,遂在zlm群里搜聊天记录,发现大佬是用easy web rtc来作为入门参考,搞。。

二、 easy_web_rtc 入门环境安装

git clone https://github.com/Mihawk086/easy_webrtc_server.git 

Ubuntu 20.04安装

系统版本,我选了和docker里要求的版本一致。其实是乘这个机会升级了家里的Ubuntu版本。
build.sh编译脚本,抄自Dockfile
sudo 运行

#更新源
sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list && \
sed -i s@/security.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list && \
apt-get clean && \
apt-get update

#安装依赖
apt-get -y update && \
    apt-get install -y \
    libssl-dev \
    libboost-all-dev \
    libavutil-dev \
    libavformat-dev \
    libavcodec-dev \
    pkg-config \
    cmake \
    automake \
    build-essential \
    wget \
    git \
    gdb \
    net-tools \
    ffmpeg \
    vim 
 
 # 安装libsrtp库
 wget https://ghproxy.com/https://github.com/cisco/libsrtp/archive/v2.3.0.tar.gz && \
        tar xzfv v2.3.0.tar.gz && \
        cd libsrtp-2.3.0 && \
        ./configure --prefix=/usr --enable-openssl && \
        make shared_library && \
        make install \
        cd ../

# 安装muduo
git clone https://ghproxy.com/https://github.com/chenshuo/muduo.git && \
        cd muduo && \
        mkdir build && \
  cd build && \
        cmake .. && \
        make && \
  make install && \
  cp muduo/muduo/net/*.h /usr/local/include/muduo/net/ \
  cd ../

# 编译服务器
cd easy_webrtc_server && \
        mkdir build && \
  cd build && \
        cmake .. && \
        make

Docker安装

这个方法适合自己开发机器Ubuntu不是20.04的同学,但需要会docker,并且测试的时候映射端口也麻烦一点。

docker部署测试

首先就是找到这个DockerFile文件,之前已经clone下来了,就在项目的根目录文件。
然后执行如下命令构建镜像。

docker build -f Dockerfile -t easy_rtc:v1.0 .
  • 错误
    贴出一大段没用的打印,这里报错了,也是同样的原因,20.04版本的ffmpeg已经没有bfs.h这个头文件了。
Sending build context to Docker daemon  3.072kB
Step 1/9 : FROM ubuntu:20.04
 ---> ba6acccedd29
Step 2/9 : ENV TZ=Asia/Kolkata     DEBIAN_FRONTEND=noninteractive
 ---> Using cache
 ---> 5e69874a53dd
Step 3/9 : RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list &&    sed -i s@/security.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list &&  apt-get clean &&        apt-get update
 ---> Using cache
 ---> 81fbc07283b7
Step 4/9 : RUN apt-get -y update &&     apt-get install -y              libssl-dev     libboost-all-dev                 libavutil-dev           libavformat-dev                 libavcodec-dev          pkg-config              cmake           automake                build-essential             wget            git             gdb             net-tools               ffmpeg          vim
 ---> Using cache
 ---> 7122bc8f2129
Step 5/9 : RUN cd /home &&      wget https://github.com/cisco/libsrtp/archive/v2.3.0.tar.gz &&  tar xfv v2.3.0.tar.gz &&        cd libsrtp-2.3.0 &&     ./configure --prefix=/usr --enable-openssl &&   make shared_library &&  make install
 ---> Using cache
 ---> 757b05eb0c98
Step 6/9 : RUN cd /home &&      git clone https://github.com/chenshuo/muduo.git &&      cd muduo &&     mkdir build &&   cd build &&    cmake .. &&     make &&   make install &&   cp /home/muduo/muduo/net/*.h /usr/local/include/muduo/net/
 ---> Using cache
 ---> fff607b0d6e2
Step 7/9 : RUN cd /home &&      git clone https://ghproxy.com/https://github.com/Mihawk086/easy_webrtc_server.git &&    cd easy_webrtc_server &&        mkdir build &&   cd build &&    cmake .. &&     make
 ---> Running in a9c3a4b3cc14
Cloning into 'easy_webrtc_server'...
-- The C compiler identification is GNU 9.4.0
......

/home/easy_webrtc_server/example/publish.cc:2:10: fatal error: libavcodec/bsf.h: No such file or directory
    2 | #include 
      |          ^~~~~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [CMakeFiles/publish.dir/build.make:63: CMakeFiles/publish.dir/example/publish.cc.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:80: CMakeFiles/publish.dir/all] Error 2
make: *** [Makefile:84: all] Error 2
  • 测试
    进入临时容器
docker run -it fff607b0d6e2 /bin/bash
  • 解决
    bsf.h头文件不需要,删掉就行了,就sed命令删除头文件那行。
FROM ubuntu:20.04

ENV TZ=Asia/Kolkata \
    DEBIAN_FRONTEND=noninteractive

RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list && \
        sed -i s@/security.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list && \
        apt-get clean && \
        apt-get update

RUN apt-get -y update && \
        apt-get install -y \
                libssl-dev \
    libboost-all-dev \
                libavutil-dev \
                libavformat-dev \
                libavcodec-dev \
                pkg-config \
                cmake \
                automake \
                build-essential \
                wget \
                git \
                gdb \
                net-tools \
                ffmpeg \
                vim 

RUN cd /home && \
        wget https://github.com/cisco/libsrtp/archive/v2.3.0.tar.gz && \
        tar xfv v2.3.0.tar.gz && \
        cd libsrtp-2.3.0 && \
        ./configure --prefix=/usr --enable-openssl && \
        make shared_library && \
        make install

RUN cd /home && \
        git clone https://github.com/chenshuo/muduo.git && \
        cd muduo && \
        mkdir build && \
  cd build && \
        cmake .. && \
        make && \
  make install && \
  cp /home/muduo/muduo/net/*.h /usr/local/include/muduo/net/

RUN cd /home && \
        git clone https://ghproxy.com/https://github.com/Mihawk086/easy_webrtc_server.git && \
        sed -i '/bsf.h/d' easy_webrtc_server/example/publish.cc easy_webrtc_server/example/rtp_src_example.cc && \
        cd easy_webrtc_server && \
        mkdir build && \
  cd build && \
        cmake .. && \
        make


EXPOSE 8000
EXPOSE 10000/udp  
  • 启动容器
//把8000和1000端口映射出来,还有sdp交换时候udp通信的随机端口,所以开了大一段端口,导致启动很慢。
//正常测试用这段就行了
docker run -it -p 8000:8000 -p 10000-11000:10000-11000 easy_rtc:v1.0

//加共享把应用和库拷贝出来测试也可以
docker run -it -v ~/work/docker_easy_rtc/share:/home/share -p 8000:8000 -p 10000-11000:10000-11000 easy_rtc:v1.0

ok,下一节专门讲测试。

一、背景

这年头,搞音视频的同学,要说自己不会webrtc,都不好意思出门了,所以,搞…
谷歌webRTC框架比较重,我擅长的又是设备端开发,最重要的是C++高级特性我不能说完全不懂吧,只能说一窍不通。
所以我开始选择了c语言为主开发的metaRTC想作为入门,搭环境接入到IPC,坑次坑次干了一个下午,发现demo都没跑起来。抓包一看,只走了第一步sdp交换,然后就没有然后了(晚上还干到凌晨看代码,然。。。)。虽然杨老师的代码回调比较多,对我来说影响,但代码功能多可读性不高,不太适合作为自己的入门学习框架,想加两个看接入过海思的同学交流一下,奈何加了两位都未通过好友申请。
还是自己来吧,遂在zlm群里搜聊天记录,发现大佬是用easy web rtc来作为入门参考,搞。。

二、 easy_web_rtc 入门环境安装

git clone https://github.com/Mihawk086/easy_webrtc_server.git 

Ubuntu 20.04安装

系统版本,我选了和docker里要求的版本一致。其实是乘这个机会升级了家里的Ubuntu版本。
build.sh编译脚本,抄自Dockfile
sudo 运行

#更新源
sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list && \
sed -i s@/security.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list && \
apt-get clean && \
apt-get update

#安装依赖
apt-get -y update && \
    apt-get install -y \
    libssl-dev \
    libboost-all-dev \
    libavutil-dev \
    libavformat-dev \
    libavcodec-dev \
    pkg-config \
    cmake \
    automake \
    build-essential \
    wget \
    git \
    gdb \
    net-tools \
    ffmpeg \
    vim 
 
 # 安装libsrtp库
 wget https://ghproxy.com/https://github.com/cisco/libsrtp/archive/v2.3.0.tar.gz && \
        tar xzfv v2.3.0.tar.gz && \
        cd libsrtp-2.3.0 && \
        ./configure --prefix=/usr --enable-openssl && \
        make shared_library && \
        make install \
        cd ../

# 安装muduo
git clone https://ghproxy.com/https://github.com/chenshuo/muduo.git && \
        cd muduo && \
        mkdir build && \
  cd build && \
        cmake .. && \
        make && \
  make install && \
  cp muduo/muduo/net/*.h /usr/local/include/muduo/net/ \
  cd ../

# 编译服务器
cd easy_webrtc_server && \
        mkdir build && \
  cd build && \
        cmake .. && \
        make

Docker安装

这个方法适合自己开发机器Ubuntu不是20.04的同学,但需要会docker,并且测试的时候映射端口也麻烦一点。

docker部署测试

首先就是找到这个DockerFile文件,之前已经clone下来了,就在项目的根目录文件。
然后执行如下命令构建镜像。

docker build -f Dockerfile -t easy_rtc:v1.0 .
  • 错误
    贴出一大段没用的打印,这里报错了,也是同样的原因,20.04版本的ffmpeg已经没有bfs.h这个头文件了。
Sending build context to Docker daemon  3.072kB
Step 1/9 : FROM ubuntu:20.04
 ---> ba6acccedd29
Step 2/9 : ENV TZ=Asia/Kolkata     DEBIAN_FRONTEND=noninteractive
 ---> Using cache
 ---> 5e69874a53dd
Step 3/9 : RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list &&    sed -i s@/security.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list &&  apt-get clean &&        apt-get update
 ---> Using cache
 ---> 81fbc07283b7
Step 4/9 : RUN apt-get -y update &&     apt-get install -y              libssl-dev     libboost-all-dev                 libavutil-dev           libavformat-dev                 libavcodec-dev          pkg-config              cmake           automake                build-essential             wget            git             gdb             net-tools               ffmpeg          vim
 ---> Using cache
 ---> 7122bc8f2129
Step 5/9 : RUN cd /home &&      wget https://github.com/cisco/libsrtp/archive/v2.3.0.tar.gz &&  tar xfv v2.3.0.tar.gz &&        cd libsrtp-2.3.0 &&     ./configure --prefix=/usr --enable-openssl &&   make shared_library &&  make install
 ---> Using cache
 ---> 757b05eb0c98
Step 6/9 : RUN cd /home &&      git clone https://github.com/chenshuo/muduo.git &&      cd muduo &&     mkdir build &&   cd build &&    cmake .. &&     make &&   make install &&   cp /home/muduo/muduo/net/*.h /usr/local/include/muduo/net/
 ---> Using cache
 ---> fff607b0d6e2
Step 7/9 : RUN cd /home &&      git clone https://ghproxy.com/https://github.com/Mihawk086/easy_webrtc_server.git &&    cd easy_webrtc_server &&        mkdir build &&   cd build &&    cmake .. &&     make
 ---> Running in a9c3a4b3cc14
Cloning into 'easy_webrtc_server'...
-- The C compiler identification is GNU 9.4.0
......

/home/easy_webrtc_server/example/publish.cc:2:10: fatal error: libavcodec/bsf.h: No such file or directory
    2 | #include 
      |          ^~~~~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [CMakeFiles/publish.dir/build.make:63: CMakeFiles/publish.dir/example/publish.cc.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:80: CMakeFiles/publish.dir/all] Error 2
make: *** [Makefile:84: all] Error 2
  • 测试
    进入临时容器
docker run -it fff607b0d6e2 /bin/bash
  • 解决
    bsf.h头文件不需要,删掉就行了,就sed命令删除头文件那行。
FROM ubuntu:20.04

ENV TZ=Asia/Kolkata \
    DEBIAN_FRONTEND=noninteractive

RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list && \
        sed -i s@/security.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list && \
        apt-get clean && \
        apt-get update

RUN apt-get -y update && \
        apt-get install -y \
                libssl-dev \
    libboost-all-dev \
                libavutil-dev \
                libavformat-dev \
                libavcodec-dev \
                pkg-config \
                cmake \
                automake \
                build-essential \
                wget \
                git \
                gdb \
                net-tools \
                ffmpeg \
                vim 

RUN cd /home && \
        wget https://github.com/cisco/libsrtp/archive/v2.3.0.tar.gz && \
        tar xfv v2.3.0.tar.gz && \
        cd libsrtp-2.3.0 && \
        ./configure --prefix=/usr --enable-openssl && \
        make shared_library && \
        make install

RUN cd /home && \
        git clone https://github.com/chenshuo/muduo.git && \
        cd muduo && \
        mkdir build && \
  cd build && \
        cmake .. && \
        make && \
  make install && \
  cp /home/muduo/muduo/net/*.h /usr/local/include/muduo/net/

RUN cd /home && \
        git clone https://ghproxy.com/https://github.com/Mihawk086/easy_webrtc_server.git && \
        sed -i '/bsf.h/d' easy_webrtc_server/example/publish.cc easy_webrtc_server/example/rtp_src_example.cc && \
        cd easy_webrtc_server && \
        mkdir build && \
  cd build && \
        cmake .. && \
        make


EXPOSE 8000
EXPOSE 10000/udp  
  • 启动容器
//把8000和1000端口映射出来,还有sdp交换时候udp通信的随机端口,所以开了大一段端口,导致启动很慢。
//正常测试用这段就行了
docker run -it -p 8000:8000 -p 10000-11000:10000-11000 easy_rtc:v1.0

//加共享把应用和库拷贝出来测试也可以
docker run -it -v ~/work/docker_easy_rtc/share:/home/share -p 8000:8000 -p 10000-11000:10000-11000 easy_rtc:v1.0

ok,下一节专门讲测试。

你可能感兴趣的:(webRTC,入门系列,webrtc,docker,easy_web_rtc,webrtc入门,教程)