您好,欢迎来到暴趣科技网。
搜索
您的当前位置:首页UDP RTP 丢包 解决方案AVCom模块API接口使用说明

UDP RTP 丢包 解决方案AVCom模块API接口使用说明

来源:暴趣科技网


一、简介

本文主要站在使用者角度对AVCom模块进行说明,模块内部的算法等实现细节可以参考 上的详细文档说明。AVCom是一个封装了FEC前向纠错和QOS收端质量保证的RTP传输模块。它能够在传统RTP基础上增强数据传输对于丢包、乱序、重复包等情况的抵抗力,特别适用于WIFI3G4G等无线信道。这一切对于外层用户来说均是透明的,用户只需要调用发送接口,传入音视频数据即可,当接收到远端发送的音视频数据时,模块将调用相应的回调接口送出音视频数据,用户无需关心FECQOS等实现细节。

几种常见的使用场景:

(1)客户端-服务器模型


(A)为客户端分配两对共4个端口(紧挨着,比如100861008710088100),这组端口将唯一用于该客户端的UDP音视频数据收发,其中10086将用于音频的RTP10087用于音频的RTCP10088用于视频的RTP100用于视频的RTCP。分配的端口将通过TCP返回给客户端,一般只需要返回起始端口10086就行,可以由它推算出其他端口。


客户端在得到了10086的端口信息后,便可以创建一个AVCom对象了,创建时调用AVCom的“客户端Create接口”,提供自身的IP和本地端口、服务器的IP和服务器给自己分配的端口。本地端口一般来说是固定的,避免与其他应用冲突即可。若需要实现本地多个客户端,则需要另外考虑如何分配。

    接下来,客户端、服务器便可以通过AVCom提供的SendVideoSendAudio向对方发送经过压缩后的音视频数据了,在收到对方的数据后AVCom的虚函数OnReceiveVideoOnReceiveAudio将被调用,将收到的数据分别送音视频解码器即可。这里的接收回调为虚函数,方便用户自由实现接收后的处理动作。


(2)客户端-客户端模型

原理与客户端-服务器模型类似,不同的是双方均知道对方的IP和端口,所以都使用“客户端Create接口”创建各自AVCom即可。


二、接口说明

 模块提供DLL和静态库版本,DLL可供其他语言调用(C#、Delphi等)

(1)Create接口

A)服务器类型Create接口

BOOL Create(char *strLocalIP,  USHORT shLocalPort,  char * strRemoteIP,  UINT unQosDropDelay,

FEC_REDUN_METHOD_TYPE  eRedunMethod,  UINT unRedunRatio,

ReciveDataCallBackFunc   pfVideoRecCallBack = NULL,

ReciveDataCallBackFunc   pfAudioRecCallBack = NULL, void *pObject = NULL);

说明:

/***

* 创建RtpAvCom(服务器方式)

* @param shLocalPort: 本地收发端口(该端口用于音频RTP,必须为偶数,+1为音频RTCP端口,+2为视频RTP端口,+3为视频RTCP端口)

* @param unQosDropDelay: QOS丢包时延ms(即发现丢包时的最大等待时延,等待该时长后若仍未收到则认定丢包,比如收到1号包、3号包,那么继续等待unQosDropDelay ms后,若仍未收到2号包,则认定2号包丢失,即便往后再收到2号包也做丢弃处理)

* @param eRedunMethod: FEC冗余度类型:动态或者固定(服务器下行到客户端的链路可以采用动态FEC冗余度以节省带宽,具体见文档)

* @param unRedunRatio: FEC冗余度为固定时,所采用的冗余度百分比,如:20, 30, 40, 50, 60, 70

* @param pfVideoRecCallBack: 接收到对方发送的视频数据后的回调函数,用于C接口。当做类使用AVCom时需设置为NULL

* @param pfAudioRecCallBack: 接收到对方发送的音频数据后的回调函数,用于C接口。当做类使用AVCom时需设置为NULL

* @param pObject: 上述两个回调函数特定形参,因回调函数为static类型,本形参一般为对象指针,方便回调函数内访问成员变量,避免使用全局变量,用于C接口。当做类使用AVCom时需设置为NULL

* @return: 返回TRUE成功,为FALSE则失败

 

B)客户端类型Create接口

BOOL Create(char *strLocalIP, USHORT shLocalPort, char *strRemoteIP, USHORT shRemotePort,

UINT unQosDropDelay,

FEC_REDUN_METHOD_TYPE eRedunMethod,   UINT unRedunRatio,

ReciveDataCallBackFunc pfVideoRecCallBack = NULL,

ReciveDataCallBackFunc pfAudioRecCallBack = NULL,

void *pObject = NULL,  UINT unFecGroupSize = DEFAULT_GROUP_SIZE);

 

* @param shLocalPort: 本地收发端口(一般固定)

* @param shRemotePort: 服务端收发端口(登陆时从服务器获得)

* @param unQosDropDelay: QOS丢包时延ms(即发现丢包时的最大等待时延,等待该时长后若仍未收到则认定丢包,具体见文档)

* @param eRedunMethod: FEC冗余度类型:动态或者固定(客户端接口时建议设置为固定模式,服务器与服务器之间通讯时(此时双方都知道对方的公网IP和端口,二者可以都创建为客户端模式)建议设置为较高的固定冗余度,因为双方的网络条件较好,传输的数据量不多但极为重要。客户端到服务器的上行通讯时建议设置为中等的固定冗余度,因为用户家庭上行带宽有限,传输的上行数据往往非常重要)

* @param unRedunRatio: FEC冗余度为固定时,所采用的冗余度百分比,如:20, 30, 40, 50, 60, 70

* @param pfVideoRecCallBack: 接收到对方发送的视频数据后的回调函数,用于C接口。当做类使用AVCom时需设置为NULL

* @param pfAudioRecCallBack: 接收到对方发送的音频数据后的回调函数,用于C接口。当做类使用AVCom时需设置为NULL

* @param pObject: 上述两个回调函数特定形参,因回调函数为static类型,本形参一般为对象指针,方便回调函数内访问成员变量,避免使用全局变量,用于C接口。当做类使用AVCom时需设置为NULL

* @return: 返回TRUE成功,为FALSE则失败

 

 

(2)Close接口

void Close(); 

* @释放Create创建的资源

 

 

(3)音视频发送接口

BOOL SendAudioData(int nLen, BYTE *byBuf);

BOOL SendVideoData(int nLen, BYTE *byBuf);

 

 

(4)音视频接收虚函数[用户实现内容]

virtual void OnReciveAudioData(int nLen, BYTE *byBuf)

virtual void OnReciveVideoData(int nLen, BYTE *byBuf)




因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- baoquwan.com 版权所有 湘ICP备2024080961号-7

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务