?? example4.cpp
字號:
/* This IPv4 example uses the background thread itself to process all packets. You can use example one to send data to the session that's created in this example.*/#include "rtpsession.h"#include "rtppacket.h"#include "rtpudpv4transmitter.h"#include "rtpipv4address.h"#include "rtpsessionparams.h"#include "rtperrors.h"#ifndef WIN32 #include <netinet/in.h> #include <arpa/inet.h>#else #include <winsock2.h>#endif // WIN32#include "rtpsourcedata.h"#include <stdlib.h>#include <stdio.h>#include <iostream>#include <string>#ifdef RTP_SUPPORT_THREAD//// This function checks if there was a RTP error. If so, it displays an error// message and exists.//void checkerror(int rtperr){ if (rtperr < 0) { std::cout << "ERROR: " << RTPGetErrorString(rtperr) << std::endl; exit(-1); }}//// The new class routine//class MyRTPSession : public RTPSession{protected: void OnPollThreadStep(); void ProcessRTPPacket(const RTPSourceData &srcdat,const RTPPacket &rtppack);};void MyRTPSession::OnPollThreadStep(){ BeginDataAccess(); // check incoming packets if (GotoFirstSourceWithData()) { do { RTPPacket *pack; RTPSourceData *srcdat; srcdat = GetCurrentSourceInfo(); while ((pack = GetNextPacket()) != NULL) { ProcessRTPPacket(*srcdat,*pack); delete pack; } } while (GotoNextSourceWithData()); } EndDataAccess();}void MyRTPSession::ProcessRTPPacket(const RTPSourceData &srcdat,const RTPPacket &rtppack){ // You can inspect the packet and the source's info here std::cout << "Got packet " << rtppack.GetExtendedSequenceNumber() << " from SSRC " << srcdat.GetSSRC() << std::endl;}//// The main routine// int main(void){#ifdef WIN32 WSADATA dat; WSAStartup(MAKEWORD(2,2),&dat);#endif // WIN32 MyRTPSession sess; u_int16_t portbase,destport; u_int32_t destip; std::string ipstr; int status,i,num; // First, we'll ask for the necessary information std::cout << "Enter local portbase:" << std::endl; std::cin >> portbase; std::cout << std::endl; std::cout << std::endl; std::cout << "Number of seconds you wish to wait:" << std::endl; std::cin >> num; // Now, we'll create a RTP session, set the destination // and poll for incoming data. RTPUDPv4TransmissionParams transparams; RTPSessionParams sessparams; // IMPORTANT: The local timestamp unit MUST be set, otherwise // RTCP Sender Report info will be calculated wrong // In this case, we'll be just use 8000 samples per second. sessparams.SetOwnTimestampUnit(1.0/8000.0); transparams.SetPortbase(portbase); status = sess.Create(sessparams,&transparams); checkerror(status); // Wait a number of seconds RTPTime::Wait(RTPTime(num,0)); sess.BYEDestroy(RTPTime(10,0),0,0);#ifdef WIN32 WSACleanup();#endif // WIN32 return 0;}#elseint main(void){ std::cerr << "Thread support is required for this example" << std::endl; return 0;}#endif // RTP_SUPPORT_THREAD
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -