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);
};
按这个类操作就可以了,没必要自己搞得很累
posted @ 2009-05-19 09:32  浩@子  阅读(1913)  评论(0编辑  收藏  举报