首页 > 其他分享 >在Winform中播放RTSP视频流

在Winform中播放RTSP视频流

时间:2023-01-28 14:57:42浏览次数:42  
标签:视频流 mediaPlayer void RTSP videoCapture caching new 播放 Winform

在WPF中可以使用LibVLCSharp.WinForms、Emgu.CV组件直接播放RTSP流。

1、LibVLCSharp.WinForms

(1) 引入NuGet包

LibVLCSharp.WinForms。

(2) 准备工作

public VlcVideoControl()
{
    InitializeComponent();

    if (!DesignMode)
    {
        Core.Initialize();
    }

    _libVlc = new LibVLC();
    _mediaPlayer = new MediaPlayer(_libVlc)
    {
        Volume = 0, //静音
        EnableHardwareDecoding = isMainControl //硬件加速
    };
    videoViewMain.MediaPlayer = _mediaPlayer;

    Load += onl oad;
    HandleDestroyed += OnHandleDestroyed;
}

private void onl oad(object sender, EventArgs e)
{
    DoubleBuffered = true;
    videoViewMain.Enabled = false;
}

private void OnHandleDestroyed(object sender, EventArgs args)
{
    _mediaPlayer.Stop();
    _mediaPlayer.Dispose();
    _libVlc.Dispose();
}

(3) 播放RTSP视频流

var options = new[]
{
    "no-audio",
    "file-caching=300",
    "live-capture-caching=300",
    "disc-caching-caching=300",
    "network-caching=333",
    "live-caching=300",
    _isMainControl || EnableHardwareDecoding ? "avcodec-hw=any" : "" //硬解码
};
using (var media = new Media(_libVlc, new Uri(CameraPara.Url), options))
{
    _mediaPlayer.Play(media);
}

(4) 停止播放

if (_mediaPlayer.IsPlaying)
{
    _mediaPlayer.Stop();
}

2、Emgu.CV

(1) 引入NuGet包

Emgu.CV.UI、Emgu.CV.runtime.windows。

(2) 加载控件

private void EmguVideoControl_Load(object sender, EventArgs e)
{
    DoubleBuffered = true;

    _imageBox = new ImageBox() { SizeMode = PictureBoxSizeMode.Zoom };
    Controls.Add(_imageBox);
}

(3) 播放RTSP视频流

public void Play(string url)
{
    _videoCapture = new VideoCapture(url);
    _videoCapture.ImageGrabbed += OnImageGrabbed;
    _videoCapture.Start();
}

private void OnImageGrabbed(object sender, EventArgs args)
{
    var frame = new Mat();
    try
    {
        if (_videoCapture.Retrieve(frame) && !frame.IsEmpty)
        {
            _imageBox.Image = frame;
        }
    }
    finally
    {
        frame.Dispose();
    }
}

(4) 停止播放

public void Stop()
{
    if (_videoCapture != null)
    {
        _videoCapture.ImageGrabbed -= OnImageGrabbed;
        _videoCapture.Dispose();
        _videoCapture = null;
    }
}

标签:视频流,mediaPlayer,void,RTSP,videoCapture,caching,new,播放,Winform
From: https://www.cnblogs.com/xhubobo/p/17070291.html

相关文章

  • 在WPF中播放RTSP视频流
    在WPF中可以使用LibVLCSharp.WPF、Vlc.DotNet.Wpf组件直接播放RTSP流,此外还可以通过LibVLCSharp+SkiaSharp的方式将VLC视频流通过WriteableBitmap的方式关联到Image对象......
  • 【Winform】窗体的坐标体系
    一、Winform中的坐标系(1)第一类是屏幕坐标系,以显示屏左上角为(0,0)点的坐标。(2)第二类是窗体坐标系,以winform窗体左上角为(0,0)点。(3)第三类是窗体控件坐标系,以该控件的左上......
  • 【Winform】TreeView使用汇总
    1、拖拽节点到另一个容器Panel中TreeView控件需要监听:(1)ItemDrag事件(当用户开始拖动节点时发生)。对于Panel控件:(1)开启Panel的AlowDrop属性设置为true表示允许进行拖入操......
  • 获取WinForm窗体的宽度和高度
    我在VS2005中新建了一个C#窗体应用程序,该程序只有一个窗体,窗体的变量名为Form1刚开始时我是这样获取Form1的宽度和高度的:int  width=Form1.Width;int  height=Form1.......
  • Vlc播放rtsp视频
    Vlc播放rtsp视频,网上的例子不少,我看后觉得有点不足的地方,就是他们没有设置播放rtsp视频时的参数,参数设置对播放网络视频是很重要的,如果设置不当,或不设置,可能你的程序就播放......
  • Winform DataGridViewTextBoxCell 编辑添加右键菜单,编辑选中文本
    如上是我们使用DataGridView时,编辑单元格右键会出现系统菜单。现在我们添加自己的右键菜单,并可以操作选中文字。DataGridViewTextBoxCell:DataGridViewTextBoxCell类是......
  • Winform:数据绑定
    ​​​​​原文:​​https://blog.csdn.net/jh035/article/details/128030049​​......
  • C# winform 推荐五款图形库
    推荐五款图形库http://netcontrols.org/nplot/wiki/index.phphttps://scottplot.net/https://gitee.com/electronic-diy-studio/OxyPlotWinformhttps://sourceforge.ne......
  • winform最后一次获得焦点的控件
    1、当我在界面中有多个表格控件时,只有最下方有一套增删改的按钮,我就需要记录最后一次获得焦点的是哪个控件  2、在每个gridContrl上添加一个MouseDown事件。这个事件......
  • VS2022 17.1.6在windows10下打开winform设计器报timed out while connecting to named
    .net6.0的项目,vs202217.1.6在windows10下打开winform设计器报timedoutwhileconnectingtonamedpipe错误,同样的项目在windows7却可以打开winform设计器,很奇怪。N多......