海思项目---ORTP库---在海思sample_venc中添加ortp库并用vlc实时播放

本文介绍了如何在海思平台上移植ORTP库,并使用vlc进行实时RTP视频播放。首先,文章详细阐述了RTP的概念和ORTP库的移植步骤,包括源码修改、配置和编译。接着,通过修改sample_venc中的代码,实现了RTP传输视频的功能,并在开发板上进行了部署和测试。最后,文章提到了在vlc中通过sdp文件实现视频播放,验证了实验的成功。
摘要由CSDN通过智能技术生成
视频网络传输的2种方式
1、基于下载:http or ftp
2、基于实时:RTP/RTSP/RTCP   Real-time Transport Protocol

RTP介绍

1、openRTP,用C实现的一个RTP库(也有C++、JAVA等实现)
2、实质是一个视频服务器,工作时客户端和服务器实时传递视频数据
3、一般认为RTP工作在传输层(其实RTP比TCP/UDP高一个层次)
4、RTP(及RTCP)的实现有国际标准RFC3550规定,只要符合协议谁都可以自己写一个

1、ORTP库的移植

1、ORTP的引入
为什么要使用RTP

github上的ortp库镜像:Linphone.org mirror for ortp (git://git.linphone.org/ortp.git)
ORTP库的API

1.1、源码修改

(1)ortp库需要增加对H.264的payload支持(默认payload不包含H264)
在src/avprofile.c中357行添加:

rtp_profile_set_payload(profile,96,&payload_type_h264);

在这里插入图片描述

1.2、配置和编译

安装前置软件

配置ortp库需要的默认编译环境
	进入ortp目录执行./autogen.sh        配置默认的编译环境
//嵌入式系统—定制化→→默认很多东西是没有的,需要自己额外安装的,比如下面ortp需要安装的一系列东西:

(1)错误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 (主要用于创建makefile)

设置存放目录prefix、交叉编译工具链host

ortp库配置:./configure --prefix=/tmp/ortp --host=arm-hisiv300-linux

(1)–prefix参数是强制设定install之后生成文件的存放目录,加上这个参数有利于将输出文件统一拷贝到开发板上
(2)–host参数要与交叉编译器名称对应,我用的交叉编译器是arm,但经测试发现此名称无法识别,因此改为了arm交叉编译通用名称arm-hisiv300-linux(注意:此参数一定要加,否则交叉编译不会成功,且是自己建立的符号链接)

成功后得到的ortp库文件:

到/tmp/ortp目录下查看移植好的库和头文件
安装目录下包括:
1、lib/👉包括.so .a
2、include/ortp/👉包括.h

部署(取决于.c和makefile)

头文件要放在编写主makefile时,指定的include下,比如海思项目,如下所示,根据sample_comm_venc.c调用头文件的方式,和makefile里面include包含路径,可知移植的库的头文件要放在mpp下,common之上的目录,即mpp/include/才行,与调用ortp库的c文件所在位置和makefile有关

静态编译:将静态库.a链接到可执行文件中去,运行时不依赖链接库。
		文件体积大
	
动态编译:编译时不用库,运行时调用动态库.so的支持,编译快,
		文件体积小

这里貌似是默认的动态编译,编译时使用了头文件,运行前要提前部署(在指定位置放好)好动态文件

开发板中部署并运行测试

(1)部署libortp.so到开发板中/usr/lib目录下 (.so动态库文件)
             该位置一定已经包含在环境变量中了
(2)etc/profile中:(于开机时生效)设置ip并挂载nfs+mpp要加载特定模块(设计sensor型号)
(3)挂载nfs后进入相应位置→运行新的sample程序
(4)vlc中打开配置好的sdp文件,看到实时图像就证明整个实验完成了

3.4.1、ORTP库概览

//本身没有main函数
src目录下:			功能函数
src/tests/:		使用案例
include/ortp/:		相关数据结构和头文件

(4)ortp实现了rtp和rtcp协议,前者负责传输,后者负责控制和同步协调
3.4.2、ORTP库的使用案例
(1)src/tests/rtpsend.c
(2)ortp_init及av_profile_init
(3)ortp_scheduler_init和ORTP调度器:一个任务中完成多个会话的发送和接收,类似于select
(4)rtp_session_new和rtp的会话管理

rtp的会话session

rtp通过会话来管理数据发送和接收
		//会话的本质是一个结构体,管理很多信息
创建会话:	rtp_session_new
rtp发送:	rtp_session_send_with_ts
底层真正干活的还是socket接口那一套,参考rtpsession_inet.c

3.4.4、ORTP的一些小细节

(1)port.c中对OS的常用机制(任务创建和销毁、进程管理和信号量等)进行了封装,便于将ortp移植到不同平台中
2、utils.c中实现了一个双向链表
3、str_util.c中实现了一个队列管理
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值