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 directory2 | #include <libavcodec/bsf.h>| ^~~~~~~~~~~~~~~~~~
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.04ENV TZ=Asia/Kolkata \\DEBIAN_FRONTEND=noninteractiveRUN 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 updateRUN 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 installRUN 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 .. && \\makeEXPOSE 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 directory2 | #include <libavcodec/bsf.h>| ^~~~~~~~~~~~~~~~~~
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.04ENV TZ=Asia/Kolkata \\DEBIAN_FRONTEND=noninteractiveRUN 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 updateRUN 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 installRUN 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 .. && \\makeEXPOSE 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,下一节专门讲测试。