fix for b/4126624 Widevine DRM client not sending heartbeats
Added some missing parameters to the heartbeat message, found in end-to-end testing with youtube. Also enabled heartbeats on client builds. Change-Id: I445fb0cb168e63a041f0ecf828eaad493143a648
This commit is contained in:
@@ -72,7 +72,11 @@ class WVDRMPluginAPI {
|
||||
EventType_RightsRemoved,
|
||||
|
||||
EventType_HeartbeatServer,
|
||||
EventType_HeartbeatPeriod
|
||||
EventType_HeartbeatPeriod,
|
||||
EventType_AssetId,
|
||||
EventType_DeviceId,
|
||||
EventType_StreamId,
|
||||
EventType_UserData
|
||||
};
|
||||
|
||||
enum EventDestination {
|
||||
|
||||
@@ -117,7 +117,11 @@ protected:
|
||||
|
||||
enum MessageType {
|
||||
MessageType_HeartbeatServer = 4000,
|
||||
MessageType_HeartbeatPeriod = 4001
|
||||
MessageType_HeartbeatPeriod = 4001,
|
||||
MessageType_AssetId = 4002,
|
||||
MessageType_DeviceId = 4003,
|
||||
MessageType_StreamId = 4004,
|
||||
MessageType_UserData = 4005
|
||||
};
|
||||
|
||||
private:
|
||||
|
||||
Binary file not shown.
@@ -178,6 +178,18 @@ bool WVMDrmPlugin::SendEvent(WVDRMPluginAPI::EventType type,
|
||||
case WVDRMPluginAPI::EventType_HeartbeatPeriod:
|
||||
code = MessageType_HeartbeatPeriod;
|
||||
break;
|
||||
case WVDRMPluginAPI::EventType_AssetId:
|
||||
code = MessageType_AssetId;
|
||||
break;
|
||||
case WVDRMPluginAPI::EventType_DeviceId:
|
||||
code = MessageType_DeviceId;
|
||||
break;
|
||||
case WVDRMPluginAPI::EventType_StreamId:
|
||||
code = MessageType_StreamId;
|
||||
break;
|
||||
case WVDRMPluginAPI::EventType_UserData:
|
||||
code = MessageType_UserData;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -480,15 +480,19 @@ WV_IsWidevineMedia(const char *buffer, size_t length);
|
||||
// Parameters:
|
||||
// [in] heartbeatURL - the URL of the heartbeat server
|
||||
// [in] heartbeatPeriod - the heartbeat interval in seconds
|
||||
//
|
||||
// [in] assetId - the asset ID
|
||||
// [in] deviceId - the device ID
|
||||
// [in] streamId - the streamID
|
||||
// [in] userData - user data
|
||||
//
|
||||
// Returns:
|
||||
// WV_Status_OK on success, otherwise one of the WVStatus values
|
||||
// indicating the specific error.
|
||||
//
|
||||
CLIENT_API WVStatus
|
||||
WV_ConfigureHeartbeat(WVSession *session, std::string &heartbeatURL,
|
||||
unsigned int heartbeatPeriod);
|
||||
WV_ConfigureHeartbeat(WVSession *session, std::string &serverUrl, unsigned int period,
|
||||
unsigned long assetId, std::string &deviceId,
|
||||
std::string &streamId, std::string &userData);
|
||||
|
||||
//
|
||||
// METHOD: WV_Teardown
|
||||
|
||||
Binary file not shown.
@@ -107,12 +107,7 @@ WVMExtractorImpl::WVMExtractorImpl(sp<DataSource> dataSource)
|
||||
// Set an info listener to handle messages from the drm plugin
|
||||
mInfoListener = new WVMInfoListener();
|
||||
|
||||
// Change #if 0 to #if 1 to enable heartbeats. Since the heartbeat server
|
||||
// is not yet returning valid responses, this will cause the player to
|
||||
// fail with an error, until the heartbeat server is working correctly.
|
||||
#if 0
|
||||
sDrmManagerClient->setOnInfoListener(mInfoListener);
|
||||
#endif
|
||||
|
||||
WVStatus result = WV_Initialize(NULL);
|
||||
if (result != WV_Status_OK) {
|
||||
|
||||
@@ -44,14 +44,25 @@ void WVMInfoListener::onInfo(const DrmInfoEvent &event)
|
||||
mServerUrl = event.getMessage();
|
||||
else if (event.getType() == MessageType_HeartbeatPeriod)
|
||||
mPeriod = atoi(event.getMessage());
|
||||
else if (event.getType() == MessageType_AssetId)
|
||||
mAssetId = atoi(event.getMessage());
|
||||
else if (event.getType() == MessageType_DeviceId)
|
||||
mDeviceId = event.getMessage();
|
||||
else if (event.getType() == MessageType_StreamId)
|
||||
mStreamId = event.getMessage();
|
||||
else if (event.getType() == MessageType_UserData) {
|
||||
mUserData = event.getMessage();
|
||||
mHaveInfo = true;
|
||||
}
|
||||
}
|
||||
|
||||
void WVMInfoListener::configureHeartbeat()
|
||||
{
|
||||
// send the first time we have all the info
|
||||
if (mSession && mServerUrl.size() && mPeriod != -1) {
|
||||
if (mSession && mHaveInfo) {
|
||||
//LOGD("WVMMediaSource::calling WV_ConfigureHeartbeat()");
|
||||
WV_ConfigureHeartbeat(mSession, mServerUrl, mPeriod);
|
||||
WV_ConfigureHeartbeat(mSession, mServerUrl, mPeriod, mAssetId,
|
||||
mDeviceId, mStreamId, mUserData);
|
||||
mSession = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,19 +31,28 @@ namespace android {
|
||||
class WVMInfoListener : public DrmManagerClient::OnInfoListener {
|
||||
enum MessageType {
|
||||
MessageType_HeartbeatServer = 4000,
|
||||
MessageType_HeartbeatPeriod = 4001
|
||||
MessageType_HeartbeatPeriod = 4001,
|
||||
MessageType_AssetId = 4002,
|
||||
MessageType_DeviceId = 4003,
|
||||
MessageType_StreamId = 4004,
|
||||
MessageType_UserData = 4005
|
||||
};
|
||||
|
||||
public:
|
||||
WVMInfoListener() : mPeriod(-1) {};
|
||||
WVMInfoListener() : mSession(NULL), mHaveInfo(false){};
|
||||
virtual void onInfo(const DrmInfoEvent &event);
|
||||
void setSession(WVSession *session);
|
||||
void configureHeartbeat();
|
||||
|
||||
private:
|
||||
WVSession *mSession;
|
||||
uint32_t mAssetId;
|
||||
std::string mServerUrl;
|
||||
std::string mStreamId;
|
||||
std::string mDeviceId;
|
||||
std::string mUserData;
|
||||
int mPeriod;
|
||||
bool mHaveInfo;
|
||||
};
|
||||
|
||||
} // namespace android
|
||||
|
||||
Reference in New Issue
Block a user