example2.cpp 2.42 KB
#include <stdio.h>
#include <iostream>
#include "rtpsessionparams.h"
#include "rtpudpv4transmitter.h"
#include "rtpsession.h"
#include "rtppacket.h"

#include <thread>
#include <chrono>

using namespace jrtplib;



int main(void)
{
    int localPort = 30026;

    // RTPSession rtpSession;
	RTPSession* rtpSessionPtr = new RTPSession();
    RTPSessionParams           SessParams;
    RTPUDPv4TransmissionParams TransParams;
    SessParams.SetOwnTimestampUnit(1.0/8000.0);    // 时间戳:1秒钟8000个样本
    TransParams.SetPortbase(localPort);   // 设置本地接收的端口号
    int iErrNum = rtpSessionPtr->Create(SessParams, &TransParams);
    if (iErrNum < 0){
        printf( "Create RTP Session error! Reason: %d!\r\n",  iErrNum );
        exit(-1);
    }
    printf( "Create RTP Session OK! Reason: %d!\r\n", iErrNum);


	bool m_bRtpExit = false;
	while (!m_bRtpExit)
	{

		rtpSessionPtr->Poll();
		rtpSessionPtr->BeginDataAccess();
		
		if (rtpSessionPtr->GotoFirstSourceWithData())
		{
			do
			{
				RTPPacket* packet;
				while ((packet = rtpSessionPtr->GetNextPacket()) != NULL) 
				{
					printf("got data \n");

					rtpSessionPtr->DeletePacket(packet);
				}
			} while (rtpSessionPtr->GotoNextSourceWithData());
		}

		rtpSessionPtr->EndDataAccess();

		std::this_thread::sleep_for(std::chrono::milliseconds(10));
	}





    // // 开始接收数据
    // rtpSessionPtr->BeginDataAccess();
    // if (rtpSessionPtr->GotoFirstSource())
    // {
    //     do
    //     {
    //         RTPPacket *packet;
    //         while ((packet = rtpSessionPtr->GetNextPacket()) != 0)
    //         {

    //             // 获取接收数据长度
    //             unsigned int recvSize = packet->GetPayloadLength();
    //             // 获取接收数据
    //             unsigned char * recvData = (unsigned char *)packet->GetPayloadData();
    //             std::cout << "Got packet with extended sequence number "
    //                       << packet->GetExtendedSequenceNumber()
    //                       << " from SSRC " << packet->GetSSRC()  << "; recvSize " << recvSize << "[" << recvData << "]"
    //                       << std::endl;
    //             // 删除数据包
    //             rtpSessionPtr->DeletePacket(packet);
    //         }
    //     } while (rtpSessionPtr->GotoNextSource());
    // }
    // rtpSessionPtr->EndDataAccess();

    // rtpSessionPtr->Destroy();
    // rtpSessionPtr->AbortWait();

    return 0;
}