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:
@@ -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