android移植RTSP服务器,从服务器接收数据的处理流程与android RTSP连接服务器

1.连接服务器的处理过程

[cpp]viewplaincopy

ARTSPConnection::onConnect(constsp&msg)

interr=::connect(

mSocket,(conststructsockaddr*)&remote,sizeof(remote));

LOGE("%sL%derr=%d",__FUNCTION__,__LINE__,err);

if(err<0){

if(errno==EINPROGRESS){//正在连接中

spmsg=newAMessage(kWhatCompleteConnection,id());

msg->setMessage("reply",reply);

msg->setInt32("connection-id",mConnectionID);

msg->post();

调用---------->

[cpp]viewplaincopy

voidARTSPConnection::onMessageReceived(constsp&msg){

casekWhatCompleteConnection:

onCompleteConnection(msg);

调用---------->

[cpp]viewplaincopy

ARTSPConnection::onCompleteConnection

intres=select(mSocket+1,NULL,&ws,NULL,&tv);

CHECK_GE(res,0);

if(res==0){

//Timedout.Notyetconnected.

LOGE("%sL%d-ECONNABORTED",__FUNCTION__,__LINE__);

msg->post();//循环执行此函数检查是否connected

return;

}

2.是否接收到服务器发送的播放数据的处理

2.1在ARTSPConnection::onCompleteConnection成功连接后,发送检查接收数据的event

[cpp]viewplaincopy

voidARTSPConnection::postReceiveReponseEvent(){

if(mReceiveResponseEventPending){

return;

}

spmsg=newAMessage(kWhatReceiveResponse,id());

msg->post();

mReceiveResponseEventPending=true;

}

调用---------->2.2voidARTSPConnection::onMessageReceived(constsp&msg){

casekWhatReceiveResponse:

onReceiveResponse();

break;

继续调用---------->

2.3

[cpp]viewplaincopy

voidARTSPConnection::onReceiveResponse(){

intres=select(mSocket+1,&rs,NULL,NULL,&tv);

//LOGE("%sL%dselectres=%d",__FUNCTION__,__LINE__,res);

CHECK_GE(res,0);

if(res==1){

MakeSocketBlocking(mSocket,true);

boolsuccess=receiveRTSPReponse();//2.3.1

MakeSocketBlocking(mSocket,false);

LOGE("%sL%dselect====success=%d",__FUNCTION__,__LINE__,success);

if(!success){

//Somethinghorrible,irreparablehashappened.

flushPendingRequests();

LOGE("%sL%dreturn",__FUNCTION__,__LINE__);

return;

}

}

postReceiveReponseEvent();//循环执行此函数

继续调用……

2.3.1boolARTSPConnection::receiveRTSPReponse(){

--->

2.3.1.1boolARTSPConnection::receiveLine(AString*line){

--->

2.3.1.1.1status_tARTSPConnection::receive(void*data,size_tsize){//每次读一个字符

--->

2.3.1.1.1.1ssize_tn=recv(mSocket,(uint8_t*)data+offset,size-offset,0);//从TCP连接的另一端接收数据

--->

2.3.1.2spARTSPConnection::receiveBinaryData()

--->

2.3.1.2.1status_tARTSPConnection::receive(void*data,size_tsize){//每次读3个字符

--->

recv()

2.3.1.2.2status_tARTSPConnection::receive(void*data,size_tsize){//每次读buffer->size()个字符

--->

recv()

--->

2.3.1.3newARTSPResponse

--->

2.3.1.4receiveLine()

--->

2.3.1.5recv()//while(numBytesRead

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值