2016-03-15 111 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