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:
Jeffrey Tinker
2011-03-25 13:57:21 -07:00
parent ba5fa0ef57
commit 18617b93c6
9 changed files with 53 additions and 14 deletions

View File

@@ -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) {

View File

@@ -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;
}
}

View File

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