2016-03-15 112 views
0

环境视频长度Webchimera.js播放器

下面的代码工程,但我想知道是否最佳方法。要求是获取播放列表中每个视频的长度。

为此,我使用活动onPlayingonPaused

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()导致异常。

这种方式看起来有点乱,但我想不出另一种。

回答

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返回持续时间,有必要将其分接器设置为Avformat分配器。问题是你不能通过libvlc api来做到这一点。如果分路器未设置,则vlcMedia.duration将始终返回。

有两个选项:

  • 使用ffprobe访问视频元数据,并通过忘libvlc
  • 玩这个帖子的原始通过的play()pause()事件的组合得到持续的方式这样做。
0

我试过在libvlc API中发现任何函数都允许获取媒体长度而不玩它 - 没有成功。所以很有可能没有办法在没有播放的情况下获得媒体长度。

我错了,这是可能的(与libvlc_media_get_duration),但它没有公开在WebChimera.js API呢。如果您在GitHub上为它创建问题,我会添加它。

P.S:这将是巨大的,如果你在GitHub上产生问题的发现崩溃...

UPD:需要API implemented

+0

那么会这样做。我没有创建一个问题,因为我认为这是一个“按预期工作”而不是bug。我认为我是导致崩溃的原因之一,因为在状态从“玩”变为“暂停”之前,我正在调用.length。谢谢。 – Chayemor

+0

即使它“按预期工作” - 它不应该导致崩溃。所以这是一个毫无疑问的错误。 – RSATom