void NuPlayer::DashMpdSource::onMessageReceived(const sp<AMessage> &msg) { switch (msg->what()) { case kWhatSessionNotify: { onSessionNotify(msg); break; } default: Source::onMessageReceived(msg); break; } };
void NuPlayer::HTTPLiveSource::onMessageReceived(const sp<AMessage> &msg) { switch (msg->what()) { case kWhatSessionNotify: { onSessionNotify(msg); break; } case kWhatFetchSubtitleData: { int32_t generation; CHECK(msg->findInt32("generation", &generation)); if (generation != mFetchSubtitleDataGeneration) { // stale break; } sp<ABuffer> buffer; if (mLiveSession->dequeueAccessUnit( LiveSession::STREAMTYPE_SUBTITLES, &buffer) == OK) { sp<AMessage> notify = dupNotify(); notify->setInt32("what", kWhatSubtitleData); notify->setBuffer("buffer", buffer); notify->post(); int64_t timeUs, baseUs, durationUs, delayUs; CHECK(buffer->meta()->findInt64("baseUs", &baseUs)); CHECK(buffer->meta()->findInt64("timeUs", &timeUs)); CHECK(buffer->meta()->findInt64("durationUs", &durationUs)); delayUs = baseUs + timeUs - ALooper::GetNowUs(); msg->post(delayUs > 0ll ? delayUs : 0ll); } else { // try again in 1 second msg->post(1000000ll); } break; } default: Source::onMessageReceived(msg); break; } }
void NuPlayer::HTTPLiveSource::onMessageReceived(const sp<AMessage> &msg) { switch (msg->what()) { case kWhatSessionNotify: { onSessionNotify(msg); break; } case kWhatFetchSubtitleData: { pollForRawData( msg, mFetchSubtitleDataGeneration, /* fetch */ LiveSession::STREAMTYPE_SUBTITLES, /* push */ kWhatSubtitleData); break; } case kWhatFetchMetaData: { if (!mMetadataSelected) { break; } pollForRawData( msg, mFetchMetaDataGeneration, /* fetch */ LiveSession::STREAMTYPE_METADATA, /* push */ kWhatTimedMetaData); break; } default: Source::onMessageReceived(msg); break; } }