我正在嘗試使用libVLC作爲運動檢測項目的視頻解碼器。以前我使用的是ffmpeg庫,但Matroska文件的一些問題將我帶到了這裏。除了以正確的速度播放視頻外,我還希望能夠以我係統可以處理的最快速度獲得一幀又一幀,因爲一旦用戶設置了一些參數,我希望運動檢測算法能夠通過視頻儘可能快。我libVLC設置代碼看起來像這樣(錯誤處理和微小的細節略去了):使用libVLC作爲視頻解碼器
const char* vlc_argv[] =
{
"--no-audio", /* skip any audio track */
};
libvlc_instance_t* inst = libvlc_new(sizeof(vlc_argv)/sizeof(*vlc_argv), vlc_argv);
auto media = libvlc_media_new_path (inst, filename.c_str());
player = libvlc_media_player_new_from_media(media);
libvlc_media_release(media);
// Needed to initialize the player ?
libvlc_media_player_play(player);
libvlc_media_player_pause(player);
fps = libvlc_media_player_get_fps(player);
length = libvlc_media_player_get_length(player);
width = libvlc_video_get_width(player);
height = libvlc_video_get_height(player);
// TODO: Add libvlc_video_set_callbacks to set up callbacks to render to memory buffer
不過,我留下了以下問題:
- 有初始化一個更簡單的方法媒體播放器除了撥打
libvlc_media_player_play
,然後libvlc_media_player_pause
? - 所有的
get
函數(fps, length, width, height
)都返回零。我是否需要做一些事情來閱讀第一幀來獲取這些值,如果是的話,我該怎麼知道我的解碼幀緩衝區有多大?
嗨,只是想知道,你在哪個操作系統? – 2013-07-02 15:12:35
這是在Windows中完成的,但我運行的是Linux和Windows。 – 2013-07-02 15:57:52
您可以使用代碼轉換來訪問未佔用的幀。這是我的代碼:https://github.com/aleksas/libvlc-stream-grabber/blob/master/source/VlcStreamGrabber.cpp。 – alex 2017-01-10 11:55:00