使用libVLC作为视频解码器
Using libVLC as a video decoder
我正在尝试使用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
)都返回零。我是否需要做一些事情,比如读取第一帧来获得这些值,如果是这样,我怎么知道我解码的帧缓冲区必须有多大?
来自VLC开发人员:
-
常规的播放系统真的不适合无节奏解码。你需要使用流输出,目前还没有可编程的API。
-
get
调用返回零,因为您需要等待直到轨道创建。
相关文章:
- 错误:(-210:不支持的格式或格式组合)功能'create'中的硬件视频解码器不支持视频源
- FFmpeg——使用硬件加速进行视频解码
- 如何从WIC解码器确定自上而下/自下而上?
- 无法在 HEVC 解码器上设置输出类型 IMFTransform
- OpenCV 检查计算机上是否安装了视频编解码器 (C++)
- 如何为 OpenCV 的视频编写器动态选择可用的编解码器?
- 视频生成筛选器的输入和输出筛选器
- 寻求使用 FFmpeg 在 mp4 容器中 h264 编解码器的视频帧.数据包 pts 始终为 0
- 开源或低成本的跨平台视频编解码器库,可用于商业目的,并支持RGBA格式
- 视频混合呈现器 9 (VMR9):从输入引脚的AM_MEDIA_TYPE获取 FPS
- Java:编写自定义视频编解码器的指南
- 如何解码跟踪器响应(Bittorent)中的对等值
- Bittorrent Imlementation - 解码跟踪器响应中的"peers"值
- 视频编解码器的H264与opencv
- 我应该为游戏中的过场动画使用哪种视频解码器?
- 使用libVLC作为视频解码器
- 编写图像到视频文件独立安装编解码器
- 无法设置windows媒体视频9屏幕编码器
- 将MPEG4视频样本推送到解码器-如何使用CBaseOutputPin::DeliverNewSegment()
- 在视频解码器抽象层嗅探 H.264 原始流