Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 786f859b authored by Li Sun's avatar Li Sun Committed by Steve Kondik
Browse files

libstagefright: extend the interface to switch rtp transport

- rtp transport can be changed by setting property "rtsp.
  transport.TCP" and udp is the first choice as
  default. But the property is the global variable and
  affects each instance's behaviour.
  Extend the interface of MyHandler to let each client make
  its own choice. If the client wants to choose tcp first,
  add the string/value "rtp.transport.TCP"/"true" in the headers
  when calling MediaPlayer.setDataSource.

Change-Id: I19b6192da36d5c00e62c9f69de446f366f10c75c
Crs-Fixed: 696569
parent 88192404
Loading
Loading
Loading
Loading
+9 −2
Original line number Original line Diff line number Diff line
@@ -66,6 +66,13 @@ NuPlayer::RTSPSource::RTSPSource(


            mExtraHeaders.removeItemsAt(index);
            mExtraHeaders.removeItemsAt(index);
        }
        }

        index = mExtraHeaders.indexOfKey(String8("rtp.transport.TCP"));

        if (index >= 0) {
            mFlags |= kFlagUseTCP;
            mExtraHeaders.removeItemsAt(index);
        }
    }
    }
}
}


@@ -101,7 +108,7 @@ void NuPlayer::RTSPSource::prepareAsync() {
        mSDPLoader->load(
        mSDPLoader->load(
                mURL.c_str(), mExtraHeaders.isEmpty() ? NULL : &mExtraHeaders);
                mURL.c_str(), mExtraHeaders.isEmpty() ? NULL : &mExtraHeaders);
    } else {
    } else {
        mHandler = new MyHandler(mURL.c_str(), notify, mUIDValid, mUID);
        mHandler = new MyHandler(mURL.c_str(), notify, mUIDValid, mUID, (mFlags & kFlagUseTCP) ? true : false);
        mLooper->registerHandler(mHandler);
        mLooper->registerHandler(mHandler);


        mHandler->connect();
        mHandler->connect();
@@ -652,7 +659,7 @@ void NuPlayer::RTSPSource::onSDPLoaded(const sp<AMessage> &msg) {
        } else {
        } else {
            sp<AMessage> notify = new AMessage(kWhatNotify, mReflector->id());
            sp<AMessage> notify = new AMessage(kWhatNotify, mReflector->id());


            mHandler = new MyHandler(rtspUri.c_str(), notify, mUIDValid, mUID);
            mHandler = new MyHandler(rtspUri.c_str(), notify, mUIDValid, mUID, (mFlags & kFlagUseTCP) ? true : false);
            mLooper->registerHandler(mHandler);
            mLooper->registerHandler(mHandler);


            mHandler->loadSDP(desc);
            mHandler->loadSDP(desc);
+1 −0
Original line number Original line Diff line number Diff line
@@ -81,6 +81,7 @@ private:
    enum Flags {
    enum Flags {
        // Don't log any URLs.
        // Don't log any URLs.
        kFlagIncognito = 1,
        kFlagIncognito = 1,
        kFlagUseTCP = 2,
    };
    };


    struct TrackInfo {
    struct TrackInfo {
+4 −4
Original line number Original line Diff line number Diff line
@@ -102,7 +102,7 @@ struct MyHandler : public AHandler {
    MyHandler(
    MyHandler(
            const char *url,
            const char *url,
            const sp<AMessage> &notify,
            const sp<AMessage> &notify,
            bool uidValid = false, uid_t uid = 0)
            bool uidValid = false, uid_t uid = 0, bool tcptransport = false)
        : mNotify(notify),
        : mNotify(notify),
          mUIDValid(uidValid),
          mUIDValid(uidValid),
          mUID(uid),
          mUID(uid),
@@ -122,7 +122,7 @@ struct MyHandler : public AHandler {
          mCheckPending(false),
          mCheckPending(false),
          mCheckGeneration(0),
          mCheckGeneration(0),
          mCheckTimeoutGeneration(0),
          mCheckTimeoutGeneration(0),
          mTryTCPInterleaving(false),
          mTryTCPInterleaving(tcptransport),
          mTryFakeRTCP(false),
          mTryFakeRTCP(false),
          mReceivedFirstRTCPPacket(false),
          mReceivedFirstRTCPPacket(false),
          mReceivedFirstRTPPacket(false),
          mReceivedFirstRTPPacket(false),
@@ -138,10 +138,10 @@ struct MyHandler : public AHandler {
                          PRIORITY_HIGHEST);
                          PRIORITY_HIGHEST);


        char value[PROPERTY_VALUE_MAX] = {0};
        char value[PROPERTY_VALUE_MAX] = {0};
        property_get("rtsp.transport.TCP", value, "false");
        property_get("rtsp.transport.TCP", value, "0");
        if (!strcmp(value, "true")) {
        if (!strcmp(value, "true")) {
            mTryTCPInterleaving = true;
            mTryTCPInterleaving = true;
        } else {
        } else if (!strcmp(value, "false")) {
            mTryTCPInterleaving = false;
            mTryTCPInterleaving = false;
        }
        }