亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rtpfilestreamer.cpp

?? 這是Symbian平臺實現流媒體的通信的協議應該模型.
?? CPP
字號:
// RtpFileStreamer.cpp
//
// Copyright (c) Symbian Software Ltd 2005. All rights reserved.
//

#include "RtpFileStreamer.h"
#include <CommDbConnPref.h>

_LIT(KGreetingText,"Welcome to RTP source file dump!\n");

/**
Symbian OS 2nd phase constructor to initialise a new send source on the RRtpSession
and register to be called back when a packet is successfully sent by send source.
*/
void CRtpFileSender::ConstructL(const TDesC& aSrcFilename)
	{
			
	User::LeaveIfError(iFile.Replace(iFs,aSrcFilename,EFileWrite|EFileStreamText));
	TPtrC8 representation((TUint8*)(&KGreetingText)->Ptr(), (&KGreetingText)->Size());
	User::LeaveIfError(iFile.Write(representation));
	User::LeaveIfError(iFile.Flush());
	iFile.Close(); 
	
	User::LeaveIfError(iFile.Open(iFs,aSrcFilename,EFileRead|EFileWrite|EFileStreamText));
	iSendSrc = iSession.NewSendSourceL();
	iSendSrc.SetDefaultPayloadSize(iPacketSize);
	
	iSendSrc.PrivRegisterEventCallbackL(ERtpSendSucceeded, (TRtpCallbackFunction)CRtpFileSender::PacketSent, this);
	iSendSrc.PrivRegisterEventCallbackL(ERtpSendFail, (TRtpCallbackFunction)CRtpFileSender::SendError, this);

	iSendPacket = iSendSrc.NewSendPacketL();

	CActiveScheduler::Add(this);
	}

/**
A callback method which CRtpFileSender registers with the RtpSession to be called
when a packet is successfully sent.
*/		
void CRtpFileSender::PacketSent(CRtpFileSender* aPtr, const TRtpEvent& aEvent)
	{
	aPtr->DoPacketSent(aEvent);
	}
	
/**
An instance method which is called by the static callback function to notify 
the observer and start the RTimer such that another packet can be sent 
when the timer expires.
*/
void CRtpFileSender::DoPacketSent(const TRtpEvent& /*aEvent*/)
	{
	if (iObserver)
		{
		iObserver->NotifyPacketSent();
		}
	iSendIntervalTimer.After(iStatus,TTimeIntervalMicroSeconds32(iDelayMicroSecs));
	SetActive();
	}

/**
A callback method to be called when a sent packet fails.
*/
void CRtpFileSender::SendError(CRtpFileSender* aPtr, const TRtpEvent& aEvent)
	{
	aPtr->DoSendError(aEvent);
	}
	
/**
An instance method which is called by the static callback function to notify the
observer of the error while sending the packet.
*/	
void CRtpFileSender::DoSendError(const TRtpEvent& /*aEvent*/)
	{
	if (iObserver)
		{
		iObserver->NotifyError();
		}
	}
		
CRtpFileSender::~CRtpFileSender()
	{
	Cancel();
	iFile.Close();
	iSendIntervalTimer.Close();
	iSendPacket.Close();
	iSendSrc.Close();
	}
CRtpFileSender* CRtpFileSender::NewL(RRtpSession& aSession,RFs& aFs,const TDesC& aSrcFilename, TInt aPacketSize, TInt aDelayMicroSeconds)
	{
	if (!aSession.IsOpen())
		{
		User::Leave(KErrArgument);
		}
	CRtpFileSender* self = new (ELeave) CRtpFileSender(aSession,aFs,aPacketSize,aDelayMicroSeconds);
	CleanupStack::PushL(self);
	self->ConstructL(aSrcFilename);
	CleanupStack::Pop(self);
	return self;
	}
CRtpFileSender::CRtpFileSender(RRtpSession& aSession,RFs& aFs,TInt aPacketSize, TInt aDelayMicroSeconds) :
	CActive(0), iDelayMicroSecs(aDelayMicroSeconds), iPacketSize(aPacketSize), 
	iSession(aSession), iPayloadDesC(NULL,NULL), iFs(aFs)
	{
	}
void CRtpFileSender::StartL()
	{
	User::LeaveIfError(iSendIntervalTimer.CreateLocal());
	iSendIntervalTimer.After(iStatus,TTimeIntervalMicroSeconds32(iDelayMicroSecs));
	SetActive();
	}
	
/**
 Sends the next packet. This does the following events:
	- Get a new RtpPacket to send from the send source
	- Set the RTP timestamp of the packet 
	- Read a block of data from the file
If the data is left in file then send the packet else notify the completion and close the input file.
*/
void CRtpFileSender::RunL()
	{
	iSendPacket.SetTimestamp(User::FastCounter());
	iPayloadDesC.Set(const_cast<TUint8*>(iSendPacket.WritePayload().Ptr()),iPacketSize,iPacketSize);
	User::LeaveIfError(iFile.Read(iPayloadDesC));
	if (iPayloadDesC.Length()>0)
		{
		TInt tmp = iPayloadDesC.Length();
		iSendPacket.WritePayload().SetLength(tmp);
		iSendPacket.Send();
		}
	else
		{
		if (iObserver)
			{
			iObserver->NotifyComplete();
			}
		}	
	}
void CRtpFileSender::DoCancel()
	{
	iSendIntervalTimer.Cancel();
	}
CRtpFileStreamer::CRtpFileStreamer(RSocketServ& aSocketServ, const TInetAddr& aDestAddr, TUint aLocalPort) :
      iSocketServ(aSocketServ),
      iDestAddr(TInetAddr(aDestAddr)),
      iLocalPort(aLocalPort)
   	{
   	}
CRtpFileStreamer* CRtpFileStreamer::NewL(RSocketServ& aSocketServ,
    											const TDesC& aSrcFilename,
    											const TDesC& aDestFilename, 
    											TInt aBlockLen,
    											const TInetAddr& aDestAddr,
    											TUint aLocalPort, TInt aConnId)
	{
	CRtpFileStreamer* self = new (ELeave) CRtpFileStreamer(aSocketServ,aDestAddr,aLocalPort);
	CleanupStack::PushL(self);
	self->ConstructL(aSrcFilename,aDestFilename,aBlockLen,10000,aConnId);
	CleanupStack::Pop(self);
	return self;
	}

/**
Symbian OS 2nd phase constructor to open an Rtp session using the pre-connected socket overload,
register for the ERtpNewSource callback in the Rtp event model, create a 
CRtpFileSender active object to stream aSrcFilename
*/		
void CRtpFileStreamer::ConstructL(const TDesC& aSrcFilename, const TDesC& aDestFilename, TInt aPacketSize, TInt aDelayMicroSeconds, TInt aConnId)
	{
	
	User::LeaveIfError(iRFs.Connect());
	iRFs.CreatePrivatePath(EDriveC);
	iRFs.SetSessionToPrivate(EDriveC);
	User::LeaveIfError(iDestFile.Replace(iRFs,aDestFilename,EFileWrite));
	TInetAddr localAddr;
	localAddr.SetPort(iLocalPort);
	_LIT8(KCname, "test");
		
	if (aConnId!=KErrNotFound)
		{
		User::LeaveIfError(iConnection.Open(iSocketServ));
		TCommDbConnPref prefs;
		prefs.SetIapId(aConnId);
   		prefs.SetDialogPreference(ECommDbDialogPrefDoNotPrompt);
   		TRequestStatus stat;
   		iConnection.Start(prefs, stat);
   		User::WaitForRequest( stat );
    	User::LeaveIfError( stat.Int() );
		iRtpSession.OpenL(iSocketServ, localAddr,iDestAddr,aPacketSize+12,iConnection, EPriorityNormal, KCname);	
		}
	else
		{
		User::LeaveIfError(iSocket.Open(iSocketServ, KAfInet,KSockDatagram, KProtocolInetUdp));	
		User::LeaveIfError(iSocket.Bind(localAddr));
		localAddr.SetPort(iLocalPort + 1);
		User::LeaveIfError(iRtcpSocket.Open(iSocketServ, KAfInet,KSockDatagram, KProtocolInetUdp));	
		User::LeaveIfError(iRtcpSocket.Bind(localAddr));
		TRequestStatus stat;
		iSocket.Connect(iDestAddr,stat);
		User::WaitForRequest(stat);
		User::LeaveIfError(stat.Int());
		iDestAddr.SetPort(iDestAddr.Port() + 1);
		iRtcpSocket.Connect(iDestAddr,stat);
		User::WaitForRequest(stat);
		User::LeaveIfError(stat.Int());
		iRtpSession.OpenL(iSocket, aPacketSize+12, iRtcpSocket);
		iRtpSession.SetRTPTimeConversion(100, 100);
		}				
	iRtpSession.PrivRegisterEventCallbackL(ERtpNewSource, (TRtpCallbackFunction)CRtpFileStreamer::NewSource, this);
	iSender = CRtpFileSender::NewL(iRtpSession,iRFs,aSrcFilename, aPacketSize, aDelayMicroSeconds);
	}
CRtpFileStreamer::~CRtpFileStreamer()
	{
	if (iSender)
		{
		delete iSender;	
		}
	iDestFile.Close();
	iRFs.Close();
	iRecvPacket.Close();
	iRtpRecvSrc.Close();
	iRtpSession.Close();
	iSocket.Close();
	iRtcpSocket.Close();
	}

void CRtpFileStreamer::StartL()
	{
	iSender->StartL();
	}
/**
A callback method that is called when a packet with a new SSRC arrives.
*/
void CRtpFileStreamer::NewSource(CRtpFileStreamer* aPtr, const TRtpEvent& aEvent)
	{
	if (aPtr->ReceiveSrc().IsOpen())
		{
		aPtr->ReceiveSrc().Close();
		}
	TRAPD(err,
		aPtr->ReceiveSrc() = aEvent.Session().NewReceiveSourceL();
		aPtr->ReceiveSrc().PrivRegisterEventCallbackL(ERtpPacketReceived, (TRtpCallbackFunction)CRtpFileStreamer::PacketArrived, aPtr);)
	if (err!=KErrNone)
		{
		__DEBUGGER();
		}
	}
	
/**
A callback method that is called on packet arrival.
*/	
void CRtpFileStreamer::PacketArrived(CRtpFileStreamer* aPtr, const TRtpEvent& aEvent)
	{	
	aPtr->iRecvPacket.Close();
	aPtr->iRecvPacket = aEvent.ReceiveSource().Packet();
	if (aEvent.ReceiveSource().Packet().IsOpen())
		{
		__DEBUGGER();
		}
	TRAPD(err,aPtr->HandleReceivedPacketL());
	if (err!=KErrNone)
		{
		__DEBUGGER();
		}
	}
	
/**
An instance method called by the static callback function to
be called on packet arrival.
*/	
void CRtpFileStreamer::HandleReceivedPacketL()
	{
	if (iObserver)
		{
		iObserver->NotifyPacketReceived();
		}
	TPtrC8 writeDesc(iRecvPacket.Payload().Ptr(),iRecvPacket.Payload().Length());
	User::LeaveIfError(iDestFile.Write(writeDesc));
	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精一品亚洲二区在线视频| 国产91露脸合集magnet| 精品成人a区在线观看| 不卡视频一二三| 国产精品亚洲专一区二区三区 | 中文字幕乱码亚洲精品一区 | 日韩女同互慰一区二区| 欧洲一区二区av| 91美女在线观看| 91美女在线观看| 国产欧美视频在线观看| 国产亚洲精久久久久久| 欧美精品一区二区久久久| 一区二区三区影院| 亚洲欧美视频在线观看视频| 国产精品成人在线观看| 国产精品福利一区| 韩国女主播成人在线观看| 久久99国产精品尤物| 激情六月婷婷综合| 欧美一区二区三区啪啪| 精品成人一区二区| 青青草97国产精品免费观看无弹窗版 | 精品一区二区久久久| 欧美日韩亚洲综合在线| 91精品国产综合久久久久久久 | 日韩电影在线免费看| 免费看欧美女人艹b| 在线观看三级视频欧美| 亚洲人成人一区二区在线观看| 国产激情一区二区三区桃花岛亚洲| gogo大胆日本视频一区| 欧美日韩国产精选| 国产亚洲女人久久久久毛片| 久久国产乱子精品免费女| 成人av免费在线观看| 久久久久88色偷偷免费| 亚洲欧洲制服丝袜| 91成人免费在线| 久久精品一区四区| 成人精品国产福利| 亚洲人成亚洲人成在线观看图片 | 国产精品538一区二区在线| 精品国产一区二区三区久久影院| 开心九九激情九九欧美日韩精美视频电影 | 久久免费的精品国产v∧| 国产麻豆精品theporn| 日本电影欧美片| 亚洲一区二区在线观看视频| 国产一区高清在线| 国产精品蜜臀在线观看| 日韩av在线发布| 精品国产伦一区二区三区免费| 国产毛片一区二区| 18涩涩午夜精品.www| 久久99热这里只有精品| 日本一区二区三区四区在线视频 | 综合色天天鬼久久鬼色| 免费成人在线影院| 国产日产欧美一区| 91捆绑美女网站| 日本一道高清亚洲日美韩| 久久品道一品道久久精品| 色综合天天综合色综合av| 欧美xxxxx裸体时装秀| 一区二区三区四区av| 制服视频三区第一页精品| 国产一区二区三区免费观看| 一区二区三区在线视频播放| 欧美一级片免费看| av欧美精品.com| 无码av中文一区二区三区桃花岛| av中文字幕一区| 午夜影视日本亚洲欧洲精品| 色狠狠桃花综合| 麻豆一区二区三区| 日韩欧美一卡二卡| 色婷婷亚洲精品| 一级女性全黄久久生活片免费| 日韩一区二区三区电影在线观看 | 国产一区二区免费看| 日韩毛片高清在线播放| 精品入口麻豆88视频| 色综合天天综合网天天狠天天| 久久国产精品99久久久久久老狼 | 欧美男人的天堂一二区| 国产精品亚洲专一区二区三区| 亚洲国产视频在线| 欧美日韩免费电影| 成人精品视频.| 国产精品日产欧美久久久久| 777久久久精品| 欧美在线一区二区| 不卡视频免费播放| 丰满少妇在线播放bd日韩电影| 美女网站一区二区| 亚洲午夜激情av| 日韩一区欧美小说| 国产日产亚洲精品系列| 久久只精品国产| 成人福利在线看| 国内精品在线播放| 久久99精品网久久| 美腿丝袜亚洲综合| 日韩电影在线观看电影| 亚洲成人免费视| 亚洲在线中文字幕| 一区二区三区四区蜜桃 | 色综合中文综合网| 久久成人av少妇免费| 石原莉奈在线亚洲二区| 精品理论电影在线观看| 91精品国产综合久久精品图片| 在线观看一区二区视频| 色婷婷国产精品久久包臀| 99精品视频免费在线观看| 亚洲一区二区偷拍精品| 中文字幕亚洲区| 综合婷婷亚洲小说| 一区二区欧美精品| 亚洲无人区一区| 日韩av在线播放中文字幕| 裸体健美xxxx欧美裸体表演| 日本在线不卡视频| 精品一区二区三区免费观看| 狠狠色狠狠色综合系列| 成人综合在线网站| 91看片淫黄大片一级| 色噜噜久久综合| 欧美精品电影在线播放| av网站免费线看精品| 99re成人在线| 欧美日本韩国一区| 欧美成人精精品一区二区频| 精品国产乱码久久久久久夜甘婷婷 | 91视频免费播放| 欧美日韩国产首页在线观看| 日韩一区二区三区视频| 久久久精品蜜桃| 中文字幕视频一区| 日本v片在线高清不卡在线观看| 秋霞电影一区二区| 成人黄色777网| 欧美精品精品一区| 国产女人18毛片水真多成人如厕| 亚洲日本va午夜在线电影| 亚洲不卡av一区二区三区| 精品一区免费av| 91视频免费播放| 欧美videos中文字幕| 国产精品欧美久久久久无广告| 有码一区二区三区| 国产精品久99| 亚洲福利视频三区| 国产精品一二三四区| 欧美日韩精品免费观看视频| 精品国产a毛片| 亚洲激情网站免费观看| 六月丁香婷婷色狠狠久久| 99视频热这里只有精品免费| 91麻豆精品91久久久久同性| 国产亚洲欧美日韩在线一区| 一区二区三区影院| 国产露脸91国语对白| 欧美日韩aaaaa| 国产精品毛片大码女人| 蜜臀av在线播放一区二区三区| 91社区在线播放| 久久亚洲一区二区三区明星换脸| 亚洲国产一区二区在线播放| 国产精品99久久不卡二区| 91精品国产一区二区三区 | 国产视频在线观看一区二区三区 | 国产精品传媒在线| 国产精品自产自拍| 日韩你懂的在线观看| 亚洲一区二区三区四区在线免费观看| 国产一区视频网站| 欧美一级搡bbbb搡bbbb| 五月综合激情网| 91豆麻精品91久久久久久| 中文欧美字幕免费| 国产精品69久久久久水密桃| 精品久久久三级丝袜| 免费不卡在线视频| 911国产精品| 天堂午夜影视日韩欧美一区二区| 91香蕉视频mp4| 中文字幕字幕中文在线中不卡视频| 国产一区二区三区四区五区入口| 欧美大片免费久久精品三p| 婷婷一区二区三区| 欧美日韩在线三级| 午夜精品影院在线观看| 欧美三级电影网站| 亚洲国产成人91porn| 欧美日韩大陆一区二区| 亚洲在线观看免费视频| 欧美性大战xxxxx久久久| 欧美视频中文字幕|