tvML开发Player无法循环播放、mediaItemWillChange事件不触发求助
问题根因
mediaItemWillChange 事件的触发前提是播放列表中存在下一个待播放的媒体项,当播放器要从当前项切换到下一项时才会触发该事件。你的播放列表初始只有1个视频,播放完成后没有可切换的下一项,所以这个事件永远不会被触发。
可行解决方案
推荐监听mediaItemDidPlayToEndTime事件,该事件会在当前媒体播放完成时稳定触发,适配你的循环播放需求,修改后的代码如下:
App.onLaunch = function (options) { var video = new MediaItem('video', 'https://localhost/file_example_MP4_1920_18MG.mp4'); var player = new Player(); var playlist = new Playlist(); player.playlist = playlist; player.playlist.push(video); var parser = new DOMParser(); var alertString = '<?xml version="1.0" encoding="UTF-8" ?>' + '<document>' + '<alertTemplate>' + '</alertTemplate>' + '</document>'; var alertDoc = parser.parseFromString(alertString, "application/xml"); player.interactiveOverlayDocument = alertDoc; player.interactiveOverlayDismissable = false; // 替换为mediaItemDidPlayToEndTime事件 player.addEventListener("mediaItemDidPlayToEndTime", function (e) { // 播完后直接从头播放,也可以根据需求往playlist追加新的MediaItem player.currentTime = 0; player.play(); }); player.play(); }
额外优化建议
- 如果需要无缝循环,也可以初始化播放列表时重复推入多个相同的MediaItem,结合
mediaItemWillChange事件做后续追加,避免单条播完后的短暂停顿 - 不要重复推入同一个MediaItem实例,新推入的项建议新建
new MediaItem('video', '视频地址'),避免实例复用导致的播放异常
内容的提问来源于stack exchange,提问作者HBBob
相关产品推荐
相关产品推荐

