diff --git a/proprietary/drmwvmplugin/include/WVDRMPluginAPI.h b/proprietary/drmwvmplugin/include/WVDRMPluginAPI.h index 7eee901e..0f3df83b 100644 --- a/proprietary/drmwvmplugin/include/WVDRMPluginAPI.h +++ b/proprietary/drmwvmplugin/include/WVDRMPluginAPI.h @@ -44,10 +44,10 @@ class WVDRMPluginAPI { virtual bool RegisterDrmInfo(std::string &portal, std::string &dsPath) = 0; virtual bool UnregisterDrmInfo(std::string &portal, std::string &dsPath) = 0; virtual bool AcquireDrmInfo(std::string &assetPath, WVCredentials &credentials, - std::string &dsPath, const std::string &assetIdStr, - const std::string &systemIdStr, + std::string &dsPath, const std::string &systemIdStr, + const std::string &assetIdStr, const std::string &keyIdStr, - uint32_t *assetId, uint32_t *systemId, + uint32_t *systemId, uint32_t *assetId, uint32_t *keyId) = 0; virtual bool ProcessDrmInfo(std::string &assetPath, int playbackMode) = 0; @@ -77,7 +77,7 @@ class WVDRMPluginAPI { EventType_DeviceId, EventType_StreamId, EventType_UserData - }; + }; enum EventDestination { EventDestination_JavaAPI, diff --git a/proprietary/drmwvmplugin/lib/libwvdrm_L1.so b/proprietary/drmwvmplugin/lib/libwvdrm_L1.so index ef681fb4..1a697e00 100644 Binary files a/proprietary/drmwvmplugin/lib/libwvdrm_L1.so and b/proprietary/drmwvmplugin/lib/libwvdrm_L1.so differ diff --git a/proprietary/drmwvmplugin/lib/libwvdrm_L3.so b/proprietary/drmwvmplugin/lib/libwvdrm_L3.so index 371924cc..f57f6596 100644 Binary files a/proprietary/drmwvmplugin/lib/libwvdrm_L3.so and b/proprietary/drmwvmplugin/lib/libwvdrm_L3.so differ diff --git a/proprietary/drmwvmplugin/lib/libwvocs_L1.a b/proprietary/drmwvmplugin/lib/libwvocs_L1.a index 6e55cdd7..51202598 100644 Binary files a/proprietary/drmwvmplugin/lib/libwvocs_L1.a and b/proprietary/drmwvmplugin/lib/libwvocs_L1.a differ diff --git a/proprietary/drmwvmplugin/lib/libwvocs_L3.a b/proprietary/drmwvmplugin/lib/libwvocs_L3.a index 8226ef84..63e56120 100644 Binary files a/proprietary/drmwvmplugin/lib/libwvocs_L3.a and b/proprietary/drmwvmplugin/lib/libwvocs_L3.a differ diff --git a/proprietary/streamcontrol/include/WVStreamControlAPI.h b/proprietary/streamcontrol/include/WVStreamControlAPI.h index 24564c56..8d1ce050 100644 --- a/proprietary/streamcontrol/include/WVStreamControlAPI.h +++ b/proprietary/streamcontrol/include/WVStreamControlAPI.h @@ -1038,16 +1038,16 @@ CLIENT_API WVStatus WV_Info_CurrentBandwidth(WVSession *session, unsigned long *bandwidth); // -// METHOD: WV_Info_BytesBuffered +// METHOD: WV_Info_TimeBuffered // -// This method retrieves information about the adaptive streaming buffer level -// for the media stream that was setup on the specified session. +// This method returns an approximate duration for the media buffered +// inside the Widevine adaptive client. // // Parameters: // [in] session - The session to query // -// [out] bytesBuffered - The number of bytes currently queued in the adaptive -// streaming buffer +// [out] secondsBuffered - Duration of the media currently +// buffered, in seconds // // Returns: // WV_Status_OK on success, otherwise one of the WVStatus values @@ -1055,7 +1055,7 @@ WV_Info_CurrentBandwidth(WVSession *session, unsigned long *bandwidth); // CLIENT_API WVStatus -WV_Info_BytesBuffered(WVSession *session, unsigned long long *bytesBuffered); +WV_Info_TimeBuffered(WVSession *session, float *secondsBuffered); // diff --git a/proprietary/streamcontrol/lib/libWVStreamControlAPI_L1.so b/proprietary/streamcontrol/lib/libWVStreamControlAPI_L1.so index 3d359163..b1c770c0 100644 Binary files a/proprietary/streamcontrol/lib/libWVStreamControlAPI_L1.so and b/proprietary/streamcontrol/lib/libWVStreamControlAPI_L1.so differ diff --git a/proprietary/streamcontrol/lib/libWVStreamControlAPI_L3.so b/proprietary/streamcontrol/lib/libWVStreamControlAPI_L3.so index d9b097d1..28b6f9af 100644 Binary files a/proprietary/streamcontrol/lib/libWVStreamControlAPI_L3.so and b/proprietary/streamcontrol/lib/libWVStreamControlAPI_L3.so differ diff --git a/proprietary/wvm/WVMExtractorImpl.cpp b/proprietary/wvm/WVMExtractorImpl.cpp index b2f1f49b..53dadc38 100644 --- a/proprietary/wvm/WVMExtractorImpl.cpp +++ b/proprietary/wvm/WVMExtractorImpl.cpp @@ -122,11 +122,9 @@ void WVMExtractorImpl::Initialize() #ifdef REQUIRE_SECURE_BUFFERS if (!mIsLiveStream) { - LOGD("Not live, using decrypt callback"); WVCallbacks callbacks = {NULL, NULL, NULL, NULL, NULL, NULL, WVMMediaSource::DecryptCallback}; result = WV_Initialize(&callbacks); } else { - LOGD("Live, NOT using decrypt callback"); result = WV_Initialize(NULL); } #else @@ -418,39 +416,12 @@ int64_t WVMExtractorImpl::getCachedDurationUs(status_t *finalStatus) { const size_t kMaxEncodedRates = 10; unsigned long encodedRates[kMaxEncodedRates]; size_t ratesReturned, currentTrack; - uint64_t durationUs = 0; WVStatus status = WV_Info_GetAdaptiveBitrates(mSession, encodedRates, kMaxEncodedRates, &ratesReturned, ¤tTrack); if (status == WV_Status_OK) { - if (currentTrack == kMaxEncodedRates || ratesReturned == 0) { - *finalStatus = ERROR_IO; - } else { - unsigned long long bytesBuffered; - status = WV_Info_BytesBuffered(mSession, &bytesBuffered); - if (status == WV_Status_OK) { - *finalStatus = OK; - durationUs = 8000000LL * bytesBuffered / encodedRates[currentTrack]; - - // Fixed 4515636 Playback stops 5-7 seconds before end of video, - // session isn't terminated. Awesome player pauses video if - // duration is less than 2 seconds (see kLowWaterMarkUs in - // AwesomePlayer.cpp); we return END_OF_STREAM when we have 2 - // seconds of data left and let WVMK handles the actual end of media. - std::string szDuration = WV_Info_GetDuration(mSession, "sec"); - std::string szCurrent = WV_Info_GetTime(mSession, "sec"); - - double duration = strtod(szDuration.c_str(), NULL); - double current = strtod(szCurrent.c_str(), NULL); - if ((duration - current) <= 2.00) { - *finalStatus = ERROR_END_OF_STREAM; - } - } else if (status == WV_Status_End_Of_Media) { - *finalStatus = ERROR_END_OF_STREAM; - } - + if (currentTrack != kMaxEncodedRates && ratesReturned != 0) { // Log the current adaptive rate every 5 seconds - // FIXME: need to see if there is a way to send this info to the app time_t now = time(0); static time_t lastLogTime = now; if (now > lastLogTime + 5) { @@ -459,8 +430,17 @@ int64_t WVMExtractorImpl::getCachedDurationUs(status_t *finalStatus) { currentTrack, encodedRates[currentTrack]); } } - } else { + } + + uint64_t durationUs = 0; + float secondsBuffered; + status = WV_Info_TimeBuffered(mSession, &secondsBuffered); + if (status == WV_Status_End_Of_Media) { + *finalStatus = ERROR_END_OF_STREAM; + } else if (status != WV_Status_OK) { *finalStatus = ERROR_IO; + } else { + durationUs = (uint64_t)(secondsBuffered * 1000000LL); } // Scale the duration to account for Stagefright's conservative buffering.