/********************此文可以被转发,但请转发者保留作者的署名权
****李浩
****msn:lihao_nx@hotmail.com
****
****email:lihaoyxj@gmail.com
****出处:lihaoyxj.cublog.cn
****from:http://blog.csdn.net/lihao_ningxia
*****************/
以前在上海伟功时做VOIP开发时用RTP传输过audio,由于几年没做过类似的东西,都忘了这块内容。最近自己想做个视频采集传输转发的东西,要用到RTP,于是搜了搜,发现大家都强烈推荐的jrtplib.但按照它的example,自己收到的数据总是有问题,于是试着调了调,才发现,库里很多好用的接口没用上.
首先发送端:
sessparams.SetOwnTimestampUnit( 1.0/8000.0 );
sessparams.SetMaximumPacketSize( 64000 );
sessparams.SetAcceptOwnPackets( true );
sessparams.SetSourceTimeoutMultiplier( 50 );
sessparams.SetUsePollThread( true );
transparams.SetPortbase( 7000 );
m_TransSession.Create( sessparams, &transparams );
//。。。。。。数据操作
m_TransSession.SendPacket( pSendBuffer, iSendSize );
//可以不管分包等事情
接收端:
还是继承它的RTPSession这个类吧
class RTPAppSession : public RTPSession
{
public:
BOOL WaitForRecvData();
RTPAppSession(RTPSession* pSendSession);
~RTPAppSession();
void Trans();
virtual void OnRTPPacket(RTPPacket *pack, const RTPTime &receivetime, const RTPAddress *senderaddress);
protected:
long m_lSendTotalSize;
long m_lRecvTotalSize;
HANDLE m_hRecvDataEvent;
int m_Cnt;
char m_Table[10];
// 发送Session
RTPSession* m_pSendSession;
void OnNewSource(RTPSourceData *dat);
void OnBYEPacket(RTPSourceData *dat);
void OnRemoveSource(RTPSourceData *dat);
void OnPollThreadStep();
void ProcessRTPPacket(const RTPSourceData &srcdat,const RTPPacket &rtppack);
};
按这个类操作就可以了,没必要自己搞得很累
阅读(2690) | 评论(0) | 转发(0) |