C++ 使用libVLC作为视频解码器

C++ 使用libVLC作为视频解码器,c++,c,decode,libvlc,C++,C,Decode,Libvlc,我正在尝试使用libVLC作为运动检测项目的视频解码器。以前我使用的是ffmpeg库,但是Matroska文件的一些问题把我带到了这里。除了以正确的速率播放视频外,我还希望能够以我的系统能够处理的最快速率获得一帧又一帧的视频,因为一旦用户设置了一些参数,我希望运动检测算法能够尽快在视频中运行。我的libVLC设置代码如下所示(为了简洁起见,省略了错误处理和次要细节): 然而,我还有以下问题: 除了调用libvlc\u media\u player\u play然后调用libvlc\u media

我正在尝试使用libVLC作为运动检测项目的视频解码器。以前我使用的是ffmpeg库,但是Matroska文件的一些问题把我带到了这里。除了以正确的速率播放视频外,我还希望能够以我的系统能够处理的最快速率获得一帧又一帧的视频,因为一旦用户设置了一些参数,我希望运动检测算法能够尽快在视频中运行。我的libVLC设置代码如下所示(为了简洁起见,省略了错误处理和次要细节):

然而,我还有以下问题:

  • 除了调用
    libvlc\u media\u player\u play
    然后调用
    libvlc\u media\u player\u pause
    ,还有没有更直接的方法来初始化媒体播放器而不启动播放
  • 所有的
    get
    函数(
    fps,length,width,height
    )都返回零。我是否需要像读取第一帧这样的操作来获取这些值,如果需要,我如何知道解码帧缓冲区必须有多大
  • :

  • 常规播放系统实际上并不适用于未定位的解码。您需要使用流输出,目前还没有可编程的API

  • get
    呼叫返回零,因为您需要等待曲目创建完成


  • 嗨,我只是想知道,你在哪个操作系统上?这是在Windows中完成的,虽然我运行Linux和Windows。你可以使用转码来访问未定位的帧。以下是我的代码:。我使用ffmpeg时遇到的问题是用户错误。(当时,我还不知道像素纵横比。)除非libvlc有了重大的变化,否则ffmpeg库可能仍然是解码帧和单独处理帧的更好工具。
    等到创建了轨迹之后
    这意味着什么
    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