diff options
author | Li Sun <sunli@codeaurora.org> | 2015-08-31 22:39:13 +0800 |
---|---|---|
committer | Linux Build Service Account <lnxbuild@localhost> | 2015-10-06 03:24:59 -0600 |
commit | 562092cd2ad4cadc6555d582945c78465f613a12 (patch) | |
tree | 92afd2649f0d81e0aa71a7c2d4865af8cb3b2d6e | |
parent | bda215ba50dd406845bf4c3842d6d5f3c4380d6c (diff) | |
download | frameworks_av-562092cd2ad4cadc6555d582945c78465f613a12.zip frameworks_av-562092cd2ad4cadc6555d582945c78465f613a12.tar.gz frameworks_av-562092cd2ad4cadc6555d582945c78465f613a12.tar.bz2 |
rtsp: notify the client when receiving BYE message in RTCP
RTSP stack would parse "BYE" message from RTCP packets and
notify NuPlayer which will send the notification to the client.
Change-Id: I461960f28610f998b71a6e1322fe79f9856c7a92
4 files changed, 24 insertions, 0 deletions
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp index 1767eb0..86c35e2 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp @@ -2232,6 +2232,13 @@ void NuPlayer::onSourceNotify(const sp<AMessage> &msg) { break; } + case Source::kWhatRTCPByeReceived: + { + ALOGV("notify the client that Bye message is received"); + notifyListener(MEDIA_INFO, 2000, 0); + break; + } + default: TRESPASS(); } diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerSource.h b/media/libmediaplayerservice/nuplayer/NuPlayerSource.h index c87f172..9ee6c7b 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerSource.h +++ b/media/libmediaplayerservice/nuplayer/NuPlayerSource.h @@ -57,6 +57,7 @@ struct NuPlayer::Source : public AHandler { kWhatQueueDecoderShutdown, kWhatDrmNoLicense, kWhatInstantiateSecureDecoders, + kWhatRTCPByeReceived, }; // The provides message is used to notify the player about various diff --git a/media/libmediaplayerservice/nuplayer/RTSPSource.cpp b/media/libmediaplayerservice/nuplayer/RTSPSource.cpp index f641f80..6d0e075 100644 --- a/media/libmediaplayerservice/nuplayer/RTSPSource.cpp +++ b/media/libmediaplayerservice/nuplayer/RTSPSource.cpp @@ -569,6 +569,14 @@ void NuPlayer::RTSPSource::onMessageReceived(const sp<AMessage> &msg) { break; } + case MyHandler::kWhatByeReceived: + { + sp<AMessage> msg = dupNotify(); + msg->setInt32("what", kWhatRTCPByeReceived); + msg->post(); + break; + } + case SDPLoader::kWhatSDPLoaded: { onSDPLoaded(msg); diff --git a/media/libstagefright/rtsp/MyHandler.h b/media/libstagefright/rtsp/MyHandler.h index 3b74ffe..7290ee2 100644 --- a/media/libstagefright/rtsp/MyHandler.h +++ b/media/libstagefright/rtsp/MyHandler.h @@ -110,6 +110,7 @@ struct MyHandler : public AHandler { kWhatSeekDiscontinuity = 'seeD', kWhatNormalPlayTimeMapping = 'nptM', kWhatCancelCheck = 'canC', + kWhatByeReceived = 'byeR', }; MyHandler( @@ -1053,6 +1054,13 @@ struct MyHandler : public AHandler { int32_t eos; if (msg->findInt32("eos", &eos)) { ALOGI("received BYE on track index %zu", trackIndex); + char value[PROPERTY_VALUE_MAX] = {0}; + if (property_get("rtcp.bye.notify", value, "false") + && !strcasecmp(value, "true")) { + sp<AMessage> msg = mNotify->dup(); + msg->setInt32("what", kWhatByeReceived); + msg->post(); + } if (!mAllTracksHaveTime && dataReceivedOnAllChannels()) { ALOGI("No time established => fake existing data"); |