Microsoft Edge中VideoJS无法正常播放PlayReady DASH流求助
问题:VideoJS播放PlayReady DRM的MPEG-DASH流时画面冻结、音频正常
我通过以下流程处理视频:
- 用
ffmpeg将视频编码为x264格式 - 用Shaka Packager打包成带Widevine + PlayReady DRM的MPEG-DASH流
遇到的异常:
- Widevine流在Chrome和Edge上播放完全正常
- PlayReady流在Edge播放时,仅前几秒正常,随后画面冻结但音频持续播放,控制台报错:
VIDEOJS: ERROR: DOMException: Failed to execute 'changeType' on 'SourceBuffer': Changing to the type provided ('video/mp4;codecs="avc1.4d401f"') is not supported.
已验证的信息:
- PlayReady许可证服务器返回200 OK,无报错
- 该PlayReady流在Roku、Chromecast等设备上播放正常
- 在DRM测试播放器中可正常播放,排除流本身问题,确定问题出在VideoJS层面
可能的解决思路
1. 升级VideoJS及相关插件
确认videojs-contrib-dash和videojs-contrib-eme插件为最新稳定版,旧版本可能存在Edge平台PlayReady的SourceBuffer兼容bug,升级后重新测试。
2. 手动指定SourceBuffer类型
初始化播放器时,强制指定视频轨道的MIME类型,避免播放器自动切换类型失败:
player.src({ src: '你的DASH清单地址.mpd', type: 'application/dash+xml', keySystems: { 'com.microsoft.playready': { licenseUrl: '你的PlayReady许可证地址', videoType: 'video/mp4;codecs="avc1.4d401f"' } } });
3. 调整Shaka Packager打包参数
- 检查打包时PlayReady流的轨道参数,确保视频codec标识和Edge支持的格式完全匹配
- 尝试添加
--generate_static_mpd参数生成静态MPD文件,避免动态轨道切换触发的类型不兼容
4. 禁用自动轨道切换
如果播放器自动切换分辨率/轨道时触发SourceBuffer类型变更,可固定轨道或禁用自动切换:
player.tech_.on('loadedmetadata', function() { // 固定第一个视频轨道 const videoTracks = player.videoTracks(); if (videoTracks.length > 0) { videoTracks[0].selected = true; } });
5. 重置Edge的DRM配置
- 确认Edge已启用PlayReady DRM支持(在
edge://settings/privacy中检查媒体DRM设置) - 清除Edge的DRM缓存(
edge://settings/clearBrowserData,勾选"媒体许可证"后清除)
内容的提问来源于stack exchange,提问作者poepykooitje
相关产品推荐
相关产品推荐

