您的位置:首页 > 其它

MyHandler.h中RTSP流的连接

2017-03-08 10:37 92 查看
  MyHandler向外部提供了一个接口connect来完成RTSP流的连接。

  下面贴出安卓N版本MyHandler::connect原文:

  

void connect() { 
//下面是注册两个handler,mConn(sp<ARTSPConnection>)和mRTPConn(sp<ARTPConnection>)
//注册后mConn这个handler与looper()得到的looper绑定在一起
//mRTPConn这个handler与mNetLooper这个looper绑定在一起
looper()->registerHandler(mConn);
(1 ? mNetLooper : looper())->registerHandler(mRTPConn);

//新建立一个通知消息notify作为参数传递给observeBinaryData函数
//注意:notify消息创建传递的handler是this,也就是MyHandler,那么对消息名为'biny'的消息notify的处理在MyHandler::onMessageReceived的case 'biny'处理分支里
//mConn->observeBinaryData(notify)函数的功能在下文介绍
sp<AMessage> notify = new AMessage('biny', this);
mConn->observeBinaryData(notify);

//新建一个应答消息,消息名为'conn',消息的处理者为this,也即MyHandler
//相应的对消息名为'conn'的消息reply处理就会在MyHandler::onMessageReceived的case 'conn'分支里
//mOriginalSessionURL.c_str()为会话的url,也就是需要连接的RTSP源的地址
//将参数mOriginalSessionURL.c_str()和reply传递给mConn(sp<ARTSPConnection>)的connect函数来完成RTSP流的连接
//mConn(sp<ARTSPConnection>)的connect函数后续的文章向大家介绍
sp<AMessage> reply = new AMessage('conn', this);
mConn->connect(mOriginalSessionURL.c_str(), reply);
}


  下面贴出安卓N版本mConn->observeBinaryData(notify)的调用流程:

  

==>
mConn->observeBinaryData(notify)

==>
void ARTSPConnection::observeBinaryData(const sp<AMessage> &reply) {
//新建消息msg,消息名为kWhatObserveBinaryData,消息的处理者为this。也即ARTSPConnection
//则对消息名为kWhatObserveBinaryData的消息msg的处理就是在ARTSPConnection::onMessageReceived的case kWhatObserveBinaryData处理分支
//将传递来的参数即消息reply的引用设置到"reply"字段中
sp<AMessage> msg = new AMessage(kWhatObserveBinaryData, this);
msg->setMessage("reply", reply);
msg->post();
} 

==>
void ARTSPConnection::onMessageReceived(const sp<AMessage> &msg) {
switch (msg->what()) {
case kWhatConnect:
onConnect(msg);
break;

case kWhatDisconnect:
onDisconnect(msg);
break;

case kWhatCompleteConnection:
onCompleteConnection(msg);
break;

case kWhatSendRequest:
onSendRequest(msg);
break;

case kWhatReceiveResponse:
onReceiveResponse();
break;

case kWhatObserveBinaryData:
{
//对消息名为kWhatObserveBinaryData的处理
//从该消息的"reply"字段得到reply消息的引用
CHECK(msg->findMessage("reply", &mObserveBinaryMessage));
break;
}

default:
TRESPASS();
break;
}
}


  小结:MyHandler函数提供的connect函数接口对RTSP流的连接是通过MyHandler应有的ARTSPConnection对象的引用mConn提供的connect函数来完成对RTSP流的连接的。

  在连接前设置了ARTSPConnection对象mConn的成员对象mObserveBinaryMessage,即完成这个消息引用的设置,消息名为’biny’,消息处理者为MyHandler,对这个消息的处理将会在MyHandler::onMessageReceived的case ‘biny’处理分支里。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  MyHandler RTSP connect