Chinaunix首页 | 论坛 | 博客
  • 博客访问: 637212
  • 博文数量: 116
  • 博客积分: 6078
  • 博客等级: 准将
  • 技术积分: 1214
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-23 10:09
文章分类

全部博文(116)

文章存档

2016年(1)

2015年(4)

2011年(2)

2010年(21)

2009年(88)

分类: C/C++

2009-05-04 15:15:20

   /********************此文可以被转发,但请转发者保留作者的署名权
****李浩
****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);
};
按这个类操作就可以了,没必要自己搞得很累
阅读(2699) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~