环境
以下代码有效,但我想知道它是否是最佳方法。要求是获取播放列表中每个视频的长度。
为此,我使用事件 onPlaying 和 onPaused 。
wjs = require('wcjs-player');
...
chimera_container = new wjs("#chimera_container");
chimera_player = chimera_container.addPlayer({ mute: true, autoplay: false, titleBar: "none" });
chimera_player.onPlaying( OnPlaying ); // Pauses player
chimera_player.onPaused( OnPaused ); // Extracts length information
var OnPlaying = function(){
chimera_player.pause();
};
var OnPaused = function() {
console.log( chimera_player.itemDesc(chimera_player.currentItem()).mrl , chimera_player.length());
if(!chimera_player.next())
chimera_player.clearPlaylist();
};
首先,我尝试在 onPlaying 事件中执行所有代码,但应用程序始终崩溃且没有错误。检查 chimera_player.state()之后,即使在执行了 chimera_player.pause()之后,状态也没有在 onPlaying 事件内部发生变化。我认为状态正在播放并且尝试 chimera_player.next()会导致异常。
这种方式看起来有点黑客,但我想不出另一个。
答案 0 :(得分:1)
我的方法绝对是不最好的。 @RSATom在 WebChimera.js API 中公开了函数libvlc_media_get_duration
。
为了获得所需的所有时间:
... after adding playlist...
var vlcPlaylist = chimera_player.vlc.playlist;
for(var i=0, limit=chimera_player.itemCount(); i<limit; ++i ){
var vlcMedia = vlcPlaylist.items[i];
vlcMedia.parse(); // Metadata is not available if not parsed
if(vlcMedia.parsed)
// Access duration via --> vlcMedia.duration
else
logger("ERROR -- parsePlaylist -- " + vlcMedia.mrl );
}
如果您打算尝试从 MPEG 格式的文件中获取持续时间,那么您会感到头痛。为了在播放视频之前获得MPEG文件的VLC返回持续时间,必须将其 Demuxer 设置为 Avformat demuxer 。问题是你不能通过libvlc api做到这一点。如果未设置分路器,则vlcMedia.duration
将始终返回 0 。
这里有两个选择:
ffprobe
访问视频元数据,忘记通过libvlc play()
pause()
事件的组合,使用这些帖子获取持续时间的原始方式。答案 1 :(得分:0)
我已经尝试在libvlc API中找到任何函数,允许在不播放的情况下获取媒体长度 - 但没有成功。所以很有可能在没有播放的情况下无法获得媒体长度。
我错了,有可能(使用libvlc_media_get_duration
),但它尚未在WebChimera.js API
中公开。如果你要在GitHub上为它创建问题,我会添加它。
P.S。:如果您在GitHub上发现已发现崩溃的问题,那将会很棒......
upd:必需的API implemented