第三季1:ORTP库的移植与局域网视频传输

以下内容源于朱有鹏课程,如有侵权,请告知删除。

本季课程重点在于使用ORTP库来实现局域网视频实时传输。

一、ORTP的介绍

1、视频网络传输的两种方式

(1)基于下载

  • 比如http(Hyper Text Transfer Protocol 超文件传输协定);
  • 比如ftp(File Transfer Protocol,文件传输协议);
  • 如果网速慢就不会实时,如果网速大于播放速率则缓冲。
  • 基于下载方式,能够保证视频质量。

(2)基于实时

  • RTP、RTSP(S->steam,专门传输视频流的协议?)、RTCP(是对RTP的一种补充,因为RTP只有传输没有控制信息)。
  • 应用于视频监控、直播等行业。

2、ORTP的介绍

(1)RTP(Real-time Transport Protocol,实时传输协议)是一个网络传输协议。RTP协议详细说明了在互联网上传递音频和视频的标准数据包格式。

(2)openRTP,即ORTP,是用C实现的一个RTP库(其实还有C++实现的,JAVA等实现的)。这句话意思是,RTP是一种协议,而ORTP是协议的软件实现(即写成库)。

(3)实质是一个视频服务器,工作时客户端和服务器实时传递视频数据。

  • VLC播放器在这里即为客户端。

(4)一般认为RTP工作在传输层,但RTP其实比TCP/UDP高一个层次。

(5)RTP(及RTCP)的实现由国际标准RFC3550规定,只要符合协议谁都可以写一个RTP的实现。

二、ORTP库的移植

1、准备源码

(1)下载ortp源码:https://github.com/dmonakhov/ortp

  • OPTP库里面最关键的是include,src和src/test这三个文件夹,相应的数据结构和头文件存放在include/ortp目录下;src里面实现了一些功能函数;src/test是示例代码。
  • ORTP库实现了RTP和RTCP协议,前者负责传输视频,后者负载视频传输的质量控制、同步、协调等。

(2)将下载好的ortp-master.zip文件通过共享文件夹存放到ubuntu合适的目录,并解压。

  • zip文件使用unzip命令解压。
  • 这里解压到的目录是/root/hisidk/ortp-master。

2、源码修改

(1)增加H.264格式的payload支持。

  • 在src/avprofile.c中357行添加:rtp_profile_set_payload(profile,96,&payload_type_h264);
  • “:set nu” 显示行号
  • “:357”表示定位到第357行

3、配置和编译、安装

(1)进入ortp目录(/root/hisidk/ortp-master/)执行./autogen.sh

错误1:./autogen.sh: line 44: libtoolize: command not found

  • 解决:sudo apt-get install libtool*
  • ubuntu得能够上网。配置方法:先桥接到无线网卡(我的个人电脑是如此),然后配置/etc/network/interfaces文件,改为dhcp的形式。
  • GNU Libtool 可以容易的在不同的系统中建立动态链接库。它通过一个称为 Libtool 库的抽象,隐藏了不同系统之间的差异,给开发人员提供了一致的的接口。

错误2:libtoolize:   error: Please install GNU M4, or 'export M4=/path/to/gnu/m4'.

  • 解决:sudo apt-get install m4
  • M4是一个宏处理器,将输入拷贝到输出,同时将宏展开。宏可以是内嵌的也可以是用户定义的。除了可以展开宏,M4还有一些内建的函数,用来引用文件,执行Unix命令,整数运算,文本操作,循环等。M4既可以作为编译器的前端也可以单独作为一个宏处理器。

错误3:Automake - aclocal: command not found 

  • 解决:sudo apt-get install automake
  • 主要用于创建makefile。

(2)继续执行./configure --prefix=/tmp/ortp --host=arm-hisiv300-linux

  • --host=arm-hisiv300-linux,指定了交叉编译工具链,所以工具链一定要安装好(安装好并导出环境变量PATH中)。
  • --prefix=/tmp/ortp表示最后安装到/tmp/ortp此目录下。

(3)执行“make && make install”

4、查看移植完的库和头文件

  • 在/tmp/ortp目录下。

 至此,移植结束。

三、RTP传输视频

1、在官方SDK的sample中添加rtp传输代码

(1)在venc/sample_venc.c中添加:s32ChnNum = 1;

  • 本来有三路的,现在强制限制为1路。因为只是为了演示,没必要弄那么麻烦。

(2)在common/sample_common_venc.c中改了很多内容。

忽略修改的过程,将修改后的的文件sample_common_venc.c【1111】覆盖原目录的文件即可。

2、重新编译sample

(1)复制ortp头文件

(2)修改venc中Makefile,以便添加libortp的链接支持

原来的:

改后的:

(3)执行make,得到sample_venc可执行文件。

3、开发板中部署并运行测试

(1)部署(即拷贝)libortp.so到开发板中/usr/lib目录下(通过nfs挂载方式)。

(2)检查开发板中原有配置是否正确,譬如sensor是否对应实际。

(3)通过nfs挂载方式,在板载系统中运行/mnt/./sample_venc 0

(4)vlc中打开(媒体—》打开文件—》选择sdp文件)配置好的sdp文件【提取码ms4a】,看到实时图像就证明整个实验完成了。

  • 注意这里window主机的有线IP设置为192.168.1.20,因为sdp文件里面要求的。当然也可以更改,但要注意相同。

//这是VLC软件的配置文件,它告诉VLC播放器接收到的数据是怎样的。
//这里只是一些配置项目,其实还可以有很多。
/*
m=vidio表示这是视频信息 8080是端口 RTP/AVP表明传输过来的网络协议 96表示是h264的
a=rtpmap:96 H264
a=framerate:25 这表示帧率
c=IN IP4 192.168.1.20 表示VLC所在的IP地址(window的ip地址),而非远端的(远端的在报文中有自己的IP地址)

*/


版权声明:本文为oqqHuTu12345678原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。