利用Jrtplib轉發rtp包

最近有接觸到GB28181,涉及到ps格式媒體的rtp包轉發,就是攝像機推流到流媒體服務器,流媒體服務器再利用jrtplib庫將流轉發給客戶端,下面給出單路轉發的相關代碼,

jrtplib版本是3.9.1。

	RTPSession session;
	WSADATA dat;
	WSAStartup(MAKEWORD(2, 2), &dat);
	RTPSessionParams sessionparams;
	sessionparams.SetOwnTimestampUnit(1.0 / 8000.0);
	RTPUDPv4TransmissionParams transparams;
	transparams.SetPortbase(6000);
	int oldBufSize = transparams.GetRTPReceiveBuffer();
	transparams.SetRTPReceiveBuffer(oldBufSize * 2);
	int status = session.Create(sessionparams, &transparams);
	int newBufSize = transparams.GetRTPReceiveBuffer();
	int oldBufSizec = transparams.GetRTCPReceiveBuffer();
	transparams.SetRTCPReceiveBuffer(oldBufSizec * 2);
	int newBufSizec = transparams.GetRTCPReceiveBuffer();
	
	BYTE *pfBuffer;
	BYTE *pBuffer;
	uint32_t destip;

	destip = ntohl(inet_addr("192.168.1.201"));
	RTPIPv4Address addr(destip, 7000);

	session.AddDestination(addr);
	session.SetDefaultPayloadType(96);
	session.SetDefaultMark(false);
	session.SetDefaultTimestampIncrement(160);
	while (g_RTPThreadRun)
	{
		
		session.BeginDataAccess();
		if (session.GotoFirstSourceWithData())
		{
			do
			{
				RTPPacket *pack;

				while ((pack = session.GetNextPacket()) != NULL)
				{
					
					int nLen = pack->GetPayloadLength();
			
					pfBuffer = (unsigned char*)pack->GetPayloadData();
					pBuffer = new BYTE[nLen + 1];
					memcpy(pBuffer, pfBuffer, nLen);
					pBuffer[nLen] = 0;
				
					session.SendPacket((void *)pBuffer, nLen);
			
					session.DeletePacket(pack);
				}
			} while (session.GotoNextSourceWithData());
		}
		session.EndDataAccess();
		session.Poll();
		Sleep(1);
	}
	session.Destroy();
	WSACleanup();


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章