You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用libvlcsharp播放视频时如何获取当前播放的视频帧?

使用LibVLCSharp获取当前播放视频帧的实现方案

以下是两种常用的实现方式,可根据你的使用场景选择:


方案1:单次快照获取(适合临时取单帧的场景)

直接调用MediaPlayer内置的快照方法即可,代码侵入性最低:

// 定义帧保存路径,也可以直接传入Stream对象不落地保存
var frameSavePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "current_play_frame.png");
// 方法参数说明:第二个参数为输出宽度(填0保持原视频宽度),第三个参数为输出高度(填0保持原视频高度)
bool takeSnapshotSuccess = MediaPlayer.TakeSnapshot(frameSavePath, 0, 0);
if (takeSnapshotSuccess)
{
    // 快照生成成功,可直接读取对应路径的图片文件使用
}

注意:该方法必须在视频播放状态触发Playing事件之后调用才会生效,未开始播放时调用会返回false。


方案2:逐帧监听获取(适合需要持续获取所有播放帧的场景)

如果需要实时处理每一段播放帧,可以通过订阅VideoOutput的FrameReady事件实现,需要调整你的初始化代码:

  1. 首先声明全局的VideoOutput成员:
private VideoOutput _videoOutput;
  1. 修改你的OnAppearing初始化逻辑,关联VideoOutput到播放器:
public void OnAppearing()
{
    LibVLC = new LibVLC();
    // 初始化视频输出组件,用来捕获帧数据
    _videoOutput = new VideoOutput(LibVLC);
    // 订阅帧就绪事件,每解码完一帧就会触发该回调
    _videoOutput.FrameReady += OnFrameReady;

    var media = new LibVLCSharp.Shared.Media(LibVLC, new Uri("http://live.cgtn.com/1000/prog_index.m3u8"));
    MediaPlayer = new MediaPlayer(LibVLC)
    {
        Media = media,
        // 关联视频输出组件到播放器
        VideoOutput = _videoOutput
    };
    media.Dispose();
    Play();
}
  1. 实现帧处理回调方法:
private void OnFrameReady(object sender, FrameReadyEventArgs e)
{
    // e.Frame包含当前帧的完整信息
    var currentFrame = e.Frame;
    int frameWidth = currentFrame.Width;
    int frameHeight = currentFrame.Height;
    // 像素格式默认是BGRA32,可自行转换为Bitmap、Image等平台对应的图像对象使用
    // 注意:该回调触发在非UI线程,若需要更新UI需调度到对应平台的UI线程执行
}
  1. 页面退出时及时释放资源避免内存泄漏:
public void OnDisappearing()
{
    // 取消事件订阅
    _videoOutput.FrameReady -= OnFrameReady;
    // 按顺序释放资源
    MediaPlayer.Stop();
    MediaPlayer.Dispose();
    _videoOutput.Dispose();
    LibVLC.Dispose();
}

额外提示:如果需要自定义帧的像素格式,可以在初始化LibVLC时传入参数指定,例如new LibVLC("--vmem-format=RGBA")可将帧格式改为RGBA32。


内容的提问来源于stack exchange,提问作者Bill Qu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 12:57:02