jrtp的传输及转发
/********************此文可以被转发,但请转发者保留作者的署名权
****李浩
****msn:lihao_nx@hotmail.com
****
****email:lihaoyxj@gmail.com
****出处:lihaoyxj.cublog.cn
**** www.cnblogs.com/lihaoyxj
*****************/
以前在上海伟功时做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);
};
按这个类操作就可以了,没必要自己搞得很累
****李浩
****msn:lihao_nx@hotmail.com
****
****email:lihaoyxj@gmail.com
****出处:lihaoyxj.cublog.cn
**** www.cnblogs.com/lihaoyxj
*****************/
以前在上海伟功时做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);
};
按这个类操作就可以了,没必要自己搞得很累