我正在尝试将 libVLC 用作运动检测项目的视频解码器。以前我使用的是 ffmpeg 库,但是 Matroska 文件的一些问题把我带到了这里。除了以正确的速率播放视频外,我还希望能够以我的系统可以处理的最快速率获得一帧又一帧,因为一旦用户设置了一些参数,我希望运动检测算法能够通过视频尽可能快。我的 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
除了调用then之外,有没有更直接的方法来初始化媒体播放器而不开始播放libvlc_media_player_pause
?- 所有
get
函数 (fps, length, width, height
) 都返回零。我是否需要做一些事情,比如读取第一帧来获取这些值,如果是这样,我应该怎么知道我的解码帧缓冲区必须有多大?