我正在尝试将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
然后调用libvlc_media_player_pause
之外,还有一种更简单的方法来初始化媒体播放器而不启动播放吗?get
函数(fps, length, width, height
)都返回零。我是否需要做一些事情,比如读取第一帧以获取这些值,如果是这样,我怎么知道我的解码帧缓冲区必须有多大?答案 0 :(得分:3)
常规播放系统实际上并不适用于无空间解码。您需要使用流输出,目前尚无可编程API。
get
次调用返回零,因为您需要等到创建曲目。