ortp移植到hi3518eh.264封包rtp发送

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ortp移植到hi3518eh.264封包rtp发送

看到ORTP是纯C实现的rtp库,于是移植到3518e试用一下.

1.下载源码

链接地址

里面有个tar res跳转链接跳转入

链接地址

下载最新的ortp-0.23.0.tar.gz,并解压

2.编译

./configure --prefix=/work/hi3518/ortp

--host=arm-hisiv100nptl-linux

make

make install

配置只需指定安装目录prefix,编译平台host即可,这里host 直接赋值arm-hisiv100nptl-linux-gcc前缀即可,注意不是arm-hisiv100nptl-linux-而是arm-hisiv100nptl-linux。

3.部署到开发板

将编译生成的库/work/hi3518/ortp/lib/libortp.so.9复制到开发板/usr/lib中

4.添加ortp库到mpp2中

在海思SDK mpp2目录下新建rtp目录,将/work/hi3518/ortp/

下全部内容复制到该目录下,

修改mpp2/sample/Makefile.param,添加:

INC_FLAGS += -I$(MPP_PATH)/rtp/include

-L$(MPP_PATH)/rtp/lib/ -lortp

5.修改代码

示例程序venc中有将视频进行264编码并保存为文件(nfs挂载),这里一步步分析sample_venc.c即可找到最终的保存是通过sample_comm_venc.c中的

SAMPLE_COMM_VENC_SaveH264函数完成的,这里只要修改该函数为封包发送即可。

下面是sample_comm_venc.c中需要添加的部分:

#include <ortp/ortp.h>

#include <signal.h>

#include <stdlib.h>

#include <sys/types.h>

#include <sys/time.h>

#include <stdio.h>

#define Y_PLOAD_TYPE 96 //H.264

#define MAX_RTP_PKT_LENGTH 1400

#define DefaultTimestampIncrement 3600 //(90000/25)

uint32_t g_userts=0;

RtpSession *pRtpSession = NULL;

/** 初始化

*

* 主要用于对ortp以及其它参数进行初始化

* @param: char * ipStr 目的端IP地址描述串

* @param: iint port 目的端RTP监听端口

* @return: RtpSession * 返回指向RtpSession对象的指针,如果为NULL,则初始化失败

* @note:

*/

RtpSession * rtpInit( char * ipStr, int port)

{

RtpSession *session;

char *ssrc;

printf("********oRTP for H.264 Init********\n");

ortp_init();

ortp_scheduler_init();

ortp_set_log_level_mask(ORTP_MESSAGE|ORTP_WARNIN G|ORTP_ERROR);

session=rtp_session_new(RTP_SESSION_SENDONLY);

rtp_session_set_scheduling_mode(session,1);

rtp_session_set_blocking_mode(session,0);

//rtp_session_set_connected_mode(session,TRUE);

rtp_session_set_remote_addr(session,ipStr,port);

rtp_session_set_payload_type(session,Y_PLOAD_TYPE);

ssrc=getenv("SSRC");

if (ssrc!=NULL) {

printf("using SSRC=%i.\n",atoi(ssrc));

// 设置输出流的SSRC。不做此步的话将会给个随机值

rtp_session_set_ssrc(session,atoi(ssrc));

}

return session;

}

/** 结束ortp的发送,释放资源

*

* @param: RtpSession *session RTP会话对象的指针

* @return: 0表示成功

* @note:

int rtpExit(RtpSession *session)

{

printf("********oRTP for H.264 Exit********\n");

g_userts = 0;

rtp_session_destroy(session);

ortp_exit();

ortp_global_stats_display();

return 0;

}

/** 发送rtp数据包

*

* 主要用于发送rtp数据包

* @param: RtpSession *session RTP会话对象的指针

* @param: const char *buffer 要发送的数据的缓冲区地址

* @param: int len 要发送的数据长度

* @return: int 实际发送的数据包数目

* @note: 如果要发送的数据包长度大于

BYTES_PER_COUNT,本函数内部会进行分包处理

相关文档
最新文档