MyHandler.h中RTSP流的连接

  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’处理分支里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值