我尝试在 Orsay TV(Tizen 之前的三星电视)上播放流(MPEG-DASH with PlayReady)。未加密的 DASH 工作正常。我正在尝试严格按照 DRM Today 手册(即我的 DRM 提供商)获取许可证,但是播放没有开始,过了一会儿我得到了渲染错误,或者根本没有流。CustomData 是根据 DRM 提供程序规范生成的,它适用于其他平台和设备。由于 DRM 提供商的手册,它的 base64 散列到 customDataBase64。
<object id="pluginPlayerSef" classid="clsid:SAMSUNG-INFOLINK-SEF" style="border:none; width:0px;height:0px;"></object>
<object id="pluginDRM" classid="clsid:SAMSUNG-INFOLINK-SEF"></object>
var playerPlugin = document.getElementById("pluginPlayerSef");
var streamUrl = '...' + '|COMPONENT=HAS';
var laUrl = 'https://.../RightsManager.asmx';
var customData = {'userId': '...', 'sessionId': '...', 'merchant': '...'};
var customDataBase64 = 'eyJ1c2...';
var xmlData = '<?xml version='1.0' encoding='utf-8'?>' +
'<PlayReadyInitiator xmlns='http://schemas.microsoft.com/DRM/2007/03/protocols/'>' +
'<LicenseServerUriOverride>' +
'<LA_URL>' + laUrl + '</LA_URL>' +
'</LicenseServerUriOverride>' +
'<SetCustomData>' +
'<CustomData>' + customDataBase64 + '</CustomData>' +
'</SetCustomData>' +
'</PlayReadyInitiator>';
playerPlugin.Execute("InitPlayer", streamUrl);
playerPlugin.Execute("SetPlayerProperty", 3, customDataBase64, customDataBase64.length);
playerPlugin.Execute("SetPlayerProperty", 4, laUrl, laUrl.length);
playerPlugin.Execute('StartPlayback', 0);
我还尝试了另一种实现方式:
var pluginDRM = document.getElementById("pluginDRM");
pluginDRM.Open("PlayReadyDrm", "1.000", "PlayReadyDrm");
pluginDRM.Execute("ProcessInitiatorsFromXml", xmlData, xmlData.length);
pluginDRM.Execute("Start", streamUrl);
playerPlugin.Execute("InitPlayer", streamUrl);
playerPlugin.Execute('StartPlayback', 0);
我尝试了上面的代码,有无 pluginDRM.Execute("Start", streamUrl)
至于上面的组件部分,我尝试了所有这些:
var streamUrl = '...' + '|COMPONENT=HAS';
var streamUrl = '...' + '|COMPONENT=WMDRM';
var streamUrl = '...' + '|COMPONENT=HAS|DRM_TYPE=PLAYREADY';
var streamUrl = '...' + '|COMPONENT=HAS|DRM_TYPE=WMDRM';
我究竟做错了什么?请帮忙。