c# 视频播放之Vlc.DotNet.Forms

先说下优缺点

优点:与电脑无关,能播放主流编码格式视频。

缺点:只能播放本地视频,网络视频播放不了。

下面是具体操作和代码

1. 安装Vlc.DotNet.Forms 和 VideoLAN.LibVLC.Windows

Vlc.DotNet.Forms 是播放库,VideoLAN.LibVLC.Windows用于播放显示

2. 界面布局

用到 vlcControl: 视频播放组件 ;滑块 TrackBar :自定义控件,用于显示视频播放进度和音量;button:视频播放和快进

我播放是网上的视频, 所以调用线程先将视频下载到本地,下载完成后在播放。

lTrackBar_vedio 和 lTrackBar_voice 是我自定义的滑块,可以直接用系统默认的滑块控件。

 public partial class Form1 : Form{private string url = @"http://www.xxxxx.com/video/20240111155329.mp4";private string vedioPath = AppDomain.CurrentDomain.BaseDirectory + @"Vedio\123.mp4";private long vedioLength = 0;private string vedioTime;public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){if (!Directory.Exists(AppDomain.CurrentDomain.BaseDirectory + @"\Vedio"))Directory.CreateDirectory(AppDomain.CurrentDomain.BaseDirectory + @"\Vedio");if (!File.Exists(vedioPath)){VedioDownloader urlDownloader = new VedioDownloader(vedioPath, url);new Thread(new ThreadStart(urlDownloader.DownloadFileAsync)).Start(); ;}else{InitVedio();  }}private void InitVedio(){vlcControl1.Play(new FileInfo(vedioPath));button_play.BackgroundImage = Properties.Resources.audioPlay;vlcControl1.Audio.Volume = this.lTrackBar_voice.L_Value;lTrackBar_vedio.L_Maximum = this.lTrackBar_vedio.Width;lTrackBar_vedio.L_Minimum = 0;}//加载播放需要的库private void vlcControl1_VlcLibDirectoryNeeded(object sender, Vlc.DotNet.Forms.VlcLibDirectoryNeededEventArgs e){var currentAssembly = Assembly.GetEntryAssembly();var currentDirectory = new FileInfo(currentAssembly.Location).DirectoryName;if (currentDirectory != null){if (IntPtr.Size == 4){e.VlcLibDirectory = new DirectoryInfo(Path.GetFullPath(@".\libvlc\win-x86"));}else{e.VlcLibDirectory = new DirectoryInfo(Path.GetFullPath(@".\libvlc\win-x64"));}}if (!e.VlcLibDirectory.Exists){var folderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog();folderBrowserDialog.Description = "Select Vlc libraries folder.";folderBrowserDialog.RootFolder = Environment.SpecialFolder.Desktop;folderBrowserDialog.ShowNewFolderButton = true;if (folderBrowserDialog.ShowDialog() == DialogResult.OK){e.VlcLibDirectory = new DirectoryInfo(folderBrowserDialog.SelectedPath);}}}private void vlcControl1_TimeChanged(object sender, Vlc.DotNet.Core.VlcMediaPlayerTimeChangedEventArgs e){vedioLength = vlcControl1.VlcMediaPlayer.Length;string allTime = ConvertTimeStampToDateTime(vedioLength);string current = ConvertTimeStampToDateTime(vlcControl1.VlcMediaPlayer.Time);this.lTrackBar_vedio.L_Value = Convert.ToInt32(1.0f * (lTrackBar_vedio.L_Maximum - lTrackBar_vedio.L_Minimum) * vlcControl1.VlcMediaPlayer.Time / vedioLength);vedioTime = current + " / " + allTime;SetVedioTime(vedioTime);}/// <summary>/// 使用委托显示视频时间/// </summary>/// <param name="text"></param>delegate void SetTextCallBack(string text);private void SetVedioTime(string vedioTime){if (this.label_vedioTime.InvokeRequired){SetTextCallBack stcb = new SetTextCallBack(SetVedioTime);this.BeginInvoke(stcb, new object[] { vedioTime });}else{this.label_vedioTime.Text = vedioTime;}}private string ConvertTimeStampToDateTime(long vedioLength){DateTime dt = new DateTime(vedioLength * 10000);return dt.Hour.ToString().PadLeft(2, '0') + ":" + dt.Minute.ToString().PadLeft(2, '0') + ":" + dt.Second.ToString().PadLeft(2, '0');}private void button_play_Click(object sender, EventArgs e){if (vlcControl1.State == Vlc.DotNet.Core.Interops.Signatures.MediaStates.Playing){vlcControl1.Pause();button_play.BackgroundImage = Properties.Resources.audioPause2;}else{if (vlcControl1.State == Vlc.DotNet.Core.Interops.Signatures.MediaStates.Ended){InitVedio();}else{button_play.BackgroundImage = Properties.Resources.audioPlay;vlcControl1.Play();}}}private void button_voice_Click(object sender, EventArgs e){if (lTrackBar_voice.L_Value != 0){lTrackBar_voice.L_Value = 0;button_voice.BackgroundImage = Properties.Resources.voice_close;}else{lTrackBar_voice.L_Value = 80;button_voice.BackgroundImage = Properties.Resources.voice_open;}}private void lTrackBar_voice_LValueChanged(object sender, LEventArgs e){vlcControl1.Audio.Volume = lTrackBar_voice.L_Value;}private void vlcControl1_Stopped(object sender, Vlc.DotNet.Core.VlcMediaPlayerStoppedEventArgs e){button_play.BackgroundImage = Properties.Resources.audioPause2;}private void lTrackBar_vedio_MouseMove(object sender, MouseEventArgs e){PlayInNewLocation(sender,e);}private void lTrackBar_vedio_MouseDown(object sender, MouseEventArgs e){PlayInNewLocation(sender,e);}private void PlayInNewLocation(object sender, MouseEventArgs e){if (e.Button == MouseButtons.Left){if (vlcControl1.State == Vlc.DotNet.Core.Interops.Signatures.MediaStates.Ended){InitVedio();}vlcControl1.VlcMediaPlayer.Time = this.lTrackBar_vedio.L_Value * vedioLength / (lTrackBar_vedio.L_Maximum - lTrackBar_vedio.L_Minimum);}}private void button1_MouseDown(object sender, MouseEventArgs e){if (e.Button == MouseButtons.Left)vlcControl1.Rate = 2.5f;}private void button1_MouseUp(object sender, MouseEventArgs e){vlcControl1.Rate = 1;}private void Form1_FormClosed(object sender, FormClosedEventArgs e){// vlcControl在stop的过程中可能会产生子窗口消息,然而子窗口消息是在主线程(UI线程)中处理的,而stop()方法也是在主线程中调用的,这就造成了竞争性死锁。所以先释放掉主窗体,在释放vlcControlthis.Dispose();if (vlcControl1.State != Vlc.DotNet.Core.Interops.Signatures.MediaStates.Stopped)vlcControl1.Stop();vlcControl1.Dispose();}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/630911.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三网话费余额查询的API系统,基于thinkphp6.0框架,附带搭建教程

系统用的是Thinkphp6.0框架 PHP版本需要用8.2 搭建教程 1、源码上传后&#xff0c;吧运行目录改为 /public 2、然后吧 数据库文件.sql 这个文件导入到数据库内 3、打开/config/database.php目录文件&#xff0c;然后进行配置数据库信息 4、挂任务计划&#xff0c;用处&…

未来的NAS:连接您的数字生活

未来的NAS&#xff1a;连接您的数字生活 引言 网络附加存储&#xff08;Network Attached Storage&#xff0c;简称NAS&#xff09;是一种通过网络连接的存储设备&#xff0c;用于集中存储和共享数据。传统的NAS设备通常包含一个或多个硬盘驱动器&#xff0c;可以通过局域网连…

【python】学习笔记01

一、基础语法 1. 字面量 - 什么是字面量&#xff1f; 在代码中&#xff0c;被写下来的的固定的值&#xff0c;称之为字面量。 - 常用的值类型 Python中常用的有6种值&#xff08;数据&#xff09;的类型。 666 13.14 "程序员"print(666) print(13.14) print(&qu…

服务器变矿机,该如何应对?

开始 恶意的挖矿程序会导致服务器cpu的异常占用&#xff0c;很让人讨厌。起初&#xff0c;我只是使用top命令显示出占用cpu不正常的进程&#xff0c;发现其中一个进程占用了百分之九十九点几&#xff0c;然后通过kill -9 <PID>命令干掉它。但总是过不了几天&#xff0c;…

C++三剑客之std::variant(二):深入剖析

目录 1.概述 2.辅助类介绍 2.1.std::negation 2.2.std::conjunction 2.3.std::is_destructible 2.4.std::is_object 2.5.is_default_constructible 2.6.std::is_trivially_destructible 2.7.std::in_place_type和std::in_place_index 3.原理分析 3.1.存储分析 3.2.…

Jira 宣布Data Center版涨价5%-15%,6年内第8次提价

近日&#xff0c;Atlassian官方面向合作伙伴发布2024年涨价通知&#xff1a; 自2024年2月15日起&#xff0c;旗下核心产品Jira Software、Confluence、Jira Service Management的DC版本&#xff08;Data Center版本&#xff09;价格提高5%-15%&#xff08;涨幅与坐席数阶梯相关…

Django中使用MySQL的视图View

文章目录 一、MySQL创建视图二、Django模型定义 一、MySQL创建视图 首先确定好自己需要链接的两张表及其对应的字段&#xff0c;视图的意义是将两张表数据联合一起变成一张新的表方便后续查询数据。 源Django两张表模型 class ProjectTaskRange(BaseModel, TimeModel):class …

IOS-高德地图SDK接入-Swift

申请key 这个要前往高德开发平台注册成为个人开发者然后在控制台创建一个应用&#xff1a; 高德开发平台 注册步骤就不写了&#xff0c;写一下创建应用的步骤&#xff1a; 1、点击应用管理——>我的应用 2、点击右上角的创建新应用 3、输入内容&#xff1a; 4、点击添加ke…

新定义51单片机(RD8G37)实现测距测速仪

本文描述用新定义51单片机&#xff08;RD8G37&#xff09;超声波一体测距传感器实现简单的测距测速仪。 测距仪演示效果 新定义RD8G37Q48RJ开发板 超声波测距模块&#xff1a; 8位并口屏 1、main.c unsigned short timeConsuming0; unsigned int oldDistance;void rectClearS…

阿里云国外服务器价格表

阿里云国外服务器优惠活动「全球云服务器精选特惠」&#xff0c;国外服务器租用价格24元一个月起&#xff0c;免备案适合搭建网站&#xff0c;部署独立站等业务场景&#xff0c;阿里云服务器网aliyunfuwuqi.com分享阿里云国外服务器优惠活动&#xff1a; 全球云服务器精选特惠…

web terminal - 如何在mac os上运行gotty

gotty可以让你使用web terminal的方式与环境进行交互&#xff0c;实现终端效果 假设你已经配置好了go环境&#xff0c;首先使用go get github.com/yudai/gotty命令获取可执行文件&#xff0c;默认会安装在$GOPATH/bin这个目录下&#xff0c;注意如果你的go版本比较高&#xff…

大数据深度学习ResNet深度残差网络详解:网络结构解读与PyTorch实现教程

文章目录 大数据深度学习ResNet深度残差网络详解&#xff1a;网络结构解读与PyTorch实现教程一、深度残差网络&#xff08;Deep Residual Networks&#xff09;简介深度学习与网络深度的挑战残差学习的提出为什么ResNet有效&#xff1f; 二、深度学习与梯度消失问题梯度消失问题…

2024年腾讯云轻量服务器和CVM云服务器性能如何?

腾讯云轻量服务器和云服务器有什么区别&#xff1f;为什么轻量应用服务器价格便宜&#xff1f;是因为轻量服务器CPU内存性能比云服务器CVM性能差吗&#xff1f;轻量应用服务器适合中小企业或个人开发者搭建企业官网、博客论坛、微信小程序或开发测试环境&#xff0c;云服务器CV…

RaspberryPi(树莓派)配置 VNC

RaspberryPi&#xff08;树莓派&#xff09;是可以通过 VNC 来连接到机器上进行图形化操作的。 什么 VNC VNC&#xff08;Virtual Network Computing&#xff09;&#xff0c;为一种使用RFB协议的屏幕画面分享及远程操作软件。此软件借由网络&#xff0c;可发送键盘与鼠标的动…

node.js(express.js)+mysql实现注册功能

文章目录 实现步骤一、获取客户端提交到服务器的用户信息&#xff0c;对表单中的数据&#xff0c;进行合法性的效验 代码如下:二、检测用户名是否被占用三、对密码进行加密四、插入新用户&#xff08;完整代码&#xff09;总结 实现步骤 一、获取客户端提交到服务器的用户信息…

plc红绿灯程序

引言&#xff1a; PLC&#xff08;Programmable Logic Controller&#xff0c;可编程逻辑控制器&#xff09;是一种用于工业自动化控制的电子设备。西门子的SIMATIC S7-200是这类设备的一个流行系列&#xff0c;广泛应用于小型至中等规模的自动化项目中。它具有以下特点&#…

常见的设计模式(模板与方法,观察者模式,策略模式)

前言 随着时间的推移&#xff0c;软件代码越来越庞大&#xff0c;随着而来的就是如何维护日趋庞大的软件系统。在面向对象开发出现之前&#xff0c;使用的是面向过程开发来设计大型的软件程序&#xff0c;面向过程开发将软件分成一个个单独的模块&#xff0c;模块之间使用函数…

[足式机器人]Part2 Dr. CAN学习笔记-Advanced控制理论 Ch04-17 串讲

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记-Advanced控制理论 Ch04-17 串讲

7.6 MySQL基本函数的使用(❤❤❤)

7.6 MySQL基本函数的使用 1. 提要2. 数字函数3. 字符函数3.1 替换字符3.2 左填充字符及截取字符串 4. 日期函数4.1 日期函数4.2 表达式占位符4.3 日期偏移计算4.4 日期间隔 5. 条件函数5.1 IF语句5.2 case...when语句 1. 提要 2. 数字函数 3. 字符函数 3.1 替换字符 -- INSERT…

[剪藏] - 任泽平年终演讲精华:点燃希望——2024中国经济十大预测

任泽平年终演讲精华&#xff1a;点燃希望——2024中国经济十大预测 泽平宏观 2023-12-23 08:01 发表于上海 12月22日22:30&#xff0c;任泽平年终秀“点燃希望乐观者前行——2024中国经济十大预测”圆满收官。 泽平宏观、北京广播电视台、上海高净值研究院、北京时间等携手打…