大家早上好,我很难尝试添加一个简单的授权令牌来使用react本地视频从蓝色媒体服务中播放受保护的内容。这是我的代码:
ref={(ref: Video) => { this.video = ref }}
source={{
uri: "https://swannmediaservice-euwe.streaming.media.azure.net/95aae6ef-55a4-411d-9706-73890f5d2ba5/L'Homme qui courait après le Te.ism/manifest(format=mpd-time-cmaf,encryption=cenc)",type: 'mpd',
drm: {
type: 'widevine',
headers: {
'Authorization': 'Bearer=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL3d3dy5zYXRvcmlwb3AuY29tLyIsImF1ZCI6InVybjpzYXRvcmlwb3AiLCJleHAiOjE3MTA4MDczODksIm5iZiI6MTYwMTMwMDA3OH0.O_41HbAcE8kFDivOM9Q4AL2z-4TMUTLchuUoyxCdDKY'
}
}
}}此ofc仅用于测试目的。
当我在Android :引起的: java.lang.IllegalStateException: Media上测试日志输出时,总是会出现这样的错误:媒体需要一个DrmSessionManager,我假设这是因为视频不能播放。
我在蔚蓝媒体播放器中测试了这一点,一切都正常。以下是这方面的链接:
而且效果很好。这里有我遗漏的东西吗?
平台
iOS Android ExoPlayer
视频样本
URI:https://swannmediaservice-euwe.streaming.media.azure.net/95aae6ef-55a4-411d-9706-73890f5d2ba5/L'Homme qui courait aprè的le Te.ism/清单(format=mpd cmaf,encryption=cenc)
标题: Bearer=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL3d3dy5zYXRvcmlwb3AuY29tLyIsImF1ZCI6InVybjpzYXRvcmlwb3AiLCJleHAiOjE3MTA4MDczODksIm5iZiI6MTYwMTMwMDA3OH0.O_41HbAcE8kFDivOM9Q4AL2z-4TMUTLchuUoyxCdDKY
发布于 2020-10-06 21:12:50
既然找到了我自己的问题,下面是解决方案:
由于蔚蓝媒体服务咨询自己的许可服务部门来播放媒体(而不是使用3d派对许可服务),系外玩家没有意识到这一点,因此尝试播放视频,即使响应中有licenseServer (显式设置),也不管它期望在其DRM设置中粘贴一个licenseService,以便使用它获取许可并传递一个标头。因此,基本上,当我不使用licensServer并认为一切都自动工作时,我就错了。因此,我的代码所做的是:它请求一个许可证,而不是在哪里,而且它不起作用。因此,您必须解析来自链接的数据,手动提取许可服务器并将其添加到请求中,如下所示:
ref={(ref: Video) => { this.video = ref }}
source={{
uri: "your mpd url",type: 'mpd',
drm: {
type: 'widevine',
licenseServer: 'the Parsed license server form the mpd file',
headers: {
'Authorization': 'Bearer=yourtoken'
}
}
}}实现这一点,现在一切都很好。
发布于 2020-10-02 11:49:28
它可能来自清单名称,这可能是有问题的。我建议不要使用重音字符或像‘这样的特殊字符,因为名称是在流Url中公开的。在可能的情况下也移除空格。要做到这一点,请重命名源文件,重新编码内容并再次尝试。
https://stackoverflow.com/questions/64169733
复制相似问题