目录
1 ORTP的引入
1.1 视频网络传输的2种方式
(1)基于下载:http or ftp
(2)基于实时:RTP/RTSP/RTCP
1.2 ORTP的介绍
(1)openRTP (open Real-time Transport Protocol ,用C实现的一个RTP库(其实还有C++实现的,JAVA等实现的)
(2)实质是一个视频服务器,工作时客户端和服务器实时传递视频数据
(3)一般认为RTP工作在传输层,但是其实RTP比TCP/UDP高一个层次
(4)RTP(及RTCP)的实现有国际标准RFC3550规定,只要符合协议谁都可以自己写一个
(5)本季课程重点在于使用ORTP来实现局域网视频实时传输
2 ORTP库的移植
2.1 准备源码
(1)下载ortp源码:
链接:https://pan.baidu.com/s/1P-0IUR8HfJjD3sBp5mqOOg?pwd=68hs
提取码:68hs
--来自百度网盘超级会员V4的分享
(2)存放到临时工作目录并解压
2.2 源码修改
(1)增加H.264的payload支持。
在src/avprofile.c中357行添加:
rtp_profile_set_payload(profile,96,&payload_type_h264);
2.3 配置和编译、安装
(1)进入ortp目录执行./autogen.sh
(2)错误1:./autogen.sh: line 44: libtoolize: command not found
解决:sudo apt-get install libtool*
(2)错误2:libtoolize: error: Please install GNU M4, or ‘export M4=/path/to/gnu/m4’.
解决:sudo apt-get install m4
(3)错误3:Automake - aclocal: command not found
解决:sudo apt-get install automake
(4)继续执行./configure --prefix=/tmp/ortp --host=arm-hisiv300-linux
(5)make && make install
2.4 到/tmp/ortp目录下查看移植好的库和头文件
3 RTP传输视频实战
3.1 在官方SDK的sample中添加rtp传输代码
(1)venc/sample_venc.c中,添加:s32ChnNum = 1; (147行)
(2)common/sample_common_venc.c中,改了很多,直接下载文件,把原文件替换掉就行了。
注意这个c文件中的这行代码需要根据你自己的电脑ip进行修改。
#define LOCAL_HOST_IP "192.168.1.10"//根据自己的电脑ip进行设定
理解这个c文件代码,参考学习(必看):
https://blog.csdn.net/tq08g2z/article/details/77528335
https://blog.csdn.net/zhang_danf/article/details/51037572
链接:https://pan.baidu.com/s/1TnbNfvDJd7gCQToS9WTKYA?pwd=l2bd
提取码:l2bd
--来自百度网盘超级会员V4的分享
3.2 重新编译sample
(1)复制ortp头文件
cd /home/bsp/hisilion/Hi3518E_SDK_V1.0.3.0/mpp/include
cp /tmp/ortp/include/ortp/ ./ -rf
(2)修改venc中Makefile,添加libortp的链接支持
cd /home/bsp/hisilion/Hi3518E_SDK_V1.0.3.0/mpp/sample/venc
vim Makefile
修改内容如下
$(TARGET):%:%.o $(COMM_OBJ)
$(CC) $(CFLAGS) -lpthread -lm -lortp -o $@ $^ $(MPI_LIBS) $(AUDIO_LIBA) $(SENSOR_LIBS) -L/tmp/ortp/lib
(3)make。得到sample_venc可执行程序。
//复制到nfs的目录下,根据自己的设置改变路径,我的是/mnt/hisilicon_nfs
cp sample_venc /mnt/hisilion_nfs/ -rf
总结:上述操作大部分是傻瓜式修改,根本学不到东西,在自己使用海思的SOC时,可以询问海思的技术支持。
3.3 开发板中部署并运行测试
(1)部署libortp.so到开发板中/usr/lib目录下
//下面两行命令在Ubuntu中执行
cd /tmp/ortp/lib
cp *so* /mnt/hisilion_nfs/ -rf
//下面的命令在开发板的串口终端窗口中执行,前提条件:开发板已经成功的进行了nfs挂载
cd /mnt
mv *so* /usr/lib
(2)检查开发板中原有配置是否正确,譬如sensor是否对应实际
(3)在nfs中运行新的sample程序
(4)vlc中打开配置好的sdp文件,看到实时图像就证明整个实验完成了
sdp文件下载地址:
链接:https://pan.baidu.com/s/1LqV7w_VF96K7A3PL8tSxXQ?pwd=a2nv
提取码:a2nv
--来自百度网盘超级会员V4的分享
下面是sdp文件的内容,c=“”这部分需要根据你电脑的ip进行修改,我的电脑有线网卡的IPV4的ip是192.168.1.10
m=video 8080 RTP/AVP 96
a=rtpmap:96 H264
a=framerate:25
c=IN IP4 192.168.1.10