usingSystem;usingSystem.Runtime.InteropServices;usingSystem.Security;usingSystem.Text;namespaceVlcPlayer

{public classVlcPlayerBase

{privateIntPtr libvlc_instance_;privateIntPtr libvlc_media_player_;///

///视频时长///

private doubleduration_;///

///VLC 播放器。///

///

public VlcPlayerBase(stringpluginPath)

{//string pluginPath = Environment.CurrentDirectory + "\\vlc\\plugins\\";//插件目录

string plugin_arg = "--plugin-path=" +pluginPath;string[] arguments = { "-I", "dummy", "--ignore-config", "--no-video-title", plugin_arg };

libvlc_instance_=LibVlcAPI.libvlc_new(arguments);

libvlc_media_player_= LibVlcAPI.libvlc_media_player_new(libvlc_instance_); //创建 libvlc_media_player 播放核心

}///

///设置播放容器///

/// 播放容器句柄

public void SetRenderWindow(intwndHandle)

{if (libvlc_instance_ != IntPtr.Zero && wndHandle != 0)

{

LibVlcAPI.libvlc_media_player_set_hwnd(libvlc_media_player_, wndHandle);//设置播放容器

}

}///

///播放指定媒体文件///

///

public void LoadFile(stringfilePath)

{

IntPtr libvlc_media= LibVlcAPI.libvlc_media_new_path(libvlc_instance_, filePath); //创建 libvlc_media_player 播放核心

if (libvlc_media !=IntPtr.Zero)

{

LibVlcAPI.libvlc_media_parse(libvlc_media);

duration_= LibVlcAPI.libvlc_media_get_duration(libvlc_media) / 1000.0; //获取视频时长

LibVlcAPI.libvlc_media_player_set_media(libvlc_media_player_, libvlc_media);//将视频绑定到播放器去

LibVlcAPI.libvlc_media_release(libvlc_media);//LibVlcAPI.libvlc_media_player_play(libvlc_media_player_);//播放

}

}///

///播放///

public voidPlay()

{if (libvlc_media_player_ !=IntPtr.Zero)

{

LibVlcAPI.libvlc_media_player_play(libvlc_media_player_);

}

}///

///暂停播放///

public voidPause()

{if (libvlc_media_player_ !=IntPtr.Zero)

{

LibVlcAPI.libvlc_media_player_pause(libvlc_media_player_);

}

}///

///停止播放///

public voidStop()

{if (libvlc_media_player_ !=IntPtr.Zero)

{

LibVlcAPI.libvlc_media_player_stop(libvlc_media_player_);

}

}public voidRelease()

{if (libvlc_media_player_ !=IntPtr.Zero)

{

LibVlcAPI.libvlc_media_release(libvlc_media_player_);

}

}///

///获取播放时间进度///

///

public doubleGetPlayTime()

{return LibVlcAPI.libvlc_media_player_get_time(libvlc_media_player_) / 1000.0;

}///

///设置播放时间///

///

public void SetPlayTime(doubleseekTime)

{

LibVlcAPI.libvlc_media_player_set_time(libvlc_media_player_, (Int64)(seekTime* 1000));

}///

///获取音量///

///

public intGetVolume()

{returnLibVlcAPI.libvlc_audio_get_volume(libvlc_media_player_);

}///

///设置音量///

///

public void SetVolume(intvolume)

{

LibVlcAPI.libvlc_audio_set_volume(libvlc_media_player_, volume);

}///

///设置是否全屏///

///

public void SetFullScreen(boolistrue)

{

LibVlcAPI.libvlc_set_fullscreen(libvlc_media_player_, istrue? 1 : 0);

}///

///视频时长///

///

public double Duration { get { returnduration_; } }///

///是否正在播放///

public boolIsPlaying

{get{if (Duration > 0 && (int)GetPlayTime() == (int)Duration) this.Stop(); //如果播放完,关闭视频

return (int)GetPlayTime() < (int)Duration /*播放时间进度小于视频时长*/

&& Duration > 0 /*播放时间进度大于0*/

&& GetPlayTime() > 0; /*视频时长大于0*/}

}///

///获取版本(VS2015 调试模式程序会直接崩掉)///

///

public string Version { get { returnLibVlcAPI.libvlc_get_version(); } }

}#region vlclib.dll

internal static classLibVlcAPI

{internal structPointerToArrayOfPointerHelper

{

[MarshalAs(UnmanagedType.ByValArray, SizeConst= 11)]publicIntPtr[] pointers;

}///

///传入播放参数///

///

///

public static IntPtr libvlc_new(string[] arguments)

{

PointerToArrayOfPointerHelper argv= newPointerToArrayOfPointerHelper();

argv.pointers= new IntPtr[11];for (int i = 0; i < arguments.Length; i++)

{

argv.pointers[i]= Marshal.StringToHGlobalAnsi(arguments[i]); //将托管 System.String 中的内容复制到非托管内存,并在复制时转换为 ANSI 格式。

}

IntPtr argvPtr=IntPtr.Zero;try{int size = Marshal.SizeOf(typeof(PointerToArrayOfPointerHelper)); //返回非托管类型的大小(以字节为单位)。

argvPtr = Marshal.AllocHGlobal(size); //从进程的非托管内存中分配内存。

Marshal.StructureToPtr(argv, argvPtr, false); //将数据从托管对象封送到非托管内存块。

return libvlc_new(arguments.Length, argvPtr); //创建一个libvlc实例,它是引用计数的

}finally{for (int i = 0; i < arguments.Length + 1; i++)

{if (argv.pointers[i] !=IntPtr.Zero)

{

Marshal.FreeHGlobal(argv.pointers[i]);//释放以前使用 System.Runtime.InteropServices.Marshal.AllocHGlobal(System.IntPtr) 从进程的非托管内存中分配的内存。

}

}if (argvPtr != IntPtr.Zero) { Marshal.FreeHGlobal(argvPtr);/*释放以前使用 System.Runtime.InteropServices.Marshal.AllocHGlobal(System.IntPtr) 从进程的非托管内存中分配的内存。*/}

}

}///

///从本地文件系统路径新建,其他参照上一条///

///

///

///

public static IntPtr libvlc_media_new_path(IntPtr libvlc_instance, stringpath)

{

IntPtr pMrl=IntPtr.Zero;try{byte[] bytes =Encoding.UTF8.GetBytes(path);

pMrl= Marshal.AllocHGlobal(bytes.Length + 1);

Marshal.Copy(bytes,0, pMrl, bytes.Length);

Marshal.WriteByte(pMrl, bytes.Length,0);return libvlc_media_new_path(libvlc_instance, pMrl); //从本地文件路径构建一个libvlc_media

}finally{if (pMrl != IntPtr.Zero) { Marshal.FreeHGlobal(pMrl);/*释放以前使用 System.Runtime.InteropServices.Marshal.AllocHGlobal(System.IntPtr) 从进程的非托管内存中分配的内存。*/}

}

}///

///使用一个给定的媒体资源路径来建立一个libvlc_media对象.参数psz_mrl为要读取的MRL(Media Resource Location).此函数返回新建的对象或NULL.///

///

///

///

public static IntPtr libvlc_media_new_location(IntPtr libvlc_instance, stringpath)

{

IntPtr pMrl=IntPtr.Zero;try{byte[] bytes =Encoding.UTF8.GetBytes(path);

pMrl= Marshal.AllocHGlobal(bytes.Length + 1);

Marshal.Copy(bytes,0, pMrl, bytes.Length);

Marshal.WriteByte(pMrl, bytes.Length,0);return libvlc_media_new_path(libvlc_instance, pMrl); //从本地文件路径构建一个libvlc_media

}finally{if (pMrl != IntPtr.Zero) { Marshal.FreeHGlobal(pMrl);/*释放以前使用 System.Runtime.InteropServices.Marshal.AllocHGlobal(System.IntPtr) 从进程的非托管内存中分配的内存。*/}

}

}//----------------------------------------------------------------------------------------//以下是libvlc.dll导出函数

///

///创建一个libvlc实例,它是引用计数的///

///

///

///

[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]

[SuppressUnmanagedCodeSecurity]private static extern IntPtr libvlc_new(intargc, IntPtr argv);///

///释放libvlc实例///

///

[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]

[SuppressUnmanagedCodeSecurity]public static extern voidlibvlc_release(IntPtr libvlc_instance);///

///获取版本///

///

[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]

[SuppressUnmanagedCodeSecurity]public static externString libvlc_get_version();///

///从视频来源(例如Url)构建一个libvlc_meida///

///

///

///

[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]

[SuppressUnmanagedCodeSecurity]private static externIntPtr libvlc_media_new_location(IntPtr libvlc_instance, IntPtr path);///

///从本地文件路径构建一个libvlc_media///

///

///

///

[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]

[SuppressUnmanagedCodeSecurity]private static externIntPtr libvlc_media_new_path(IntPtr libvlc_instance, IntPtr path);///

///

///

///

[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]

[SuppressUnmanagedCodeSecurity]public static extern voidlibvlc_media_release(IntPtr libvlc_media_inst);///

///创建libvlc_media_player(播放核心)///

///

///

[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]

[SuppressUnmanagedCodeSecurity]public static externIntPtr libvlc_media_player_new(IntPtr libvlc_instance);///

///将视频(libvlc_media)绑定到播放器上///

///

///

[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]

[SuppressUnmanagedCodeSecurity]public static extern voidlibvlc_media_player_set_media(IntPtr libvlc_media_player, IntPtr libvlc_media);///

///设置图像输出的窗口///

///

///

[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]

[SuppressUnmanagedCodeSecurity]public static extern voidlibvlc_media_player_set_hwnd(IntPtr libvlc_mediaplayer, Int32 drawable);#region 播放控制

///

///播放///

///

[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]

[SuppressUnmanagedCodeSecurity]public static extern voidlibvlc_media_player_play(IntPtr libvlc_mediaplayer);///

///暂停///

///

[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]

[SuppressUnmanagedCodeSecurity]public static extern voidlibvlc_media_player_pause(IntPtr libvlc_mediaplayer);///

///停止///

///

[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]

[SuppressUnmanagedCodeSecurity]public static extern voidlibvlc_media_player_stop(IntPtr libvlc_mediaplayer);#endregion

///

///释放播放文件///

///

[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]

[SuppressUnmanagedCodeSecurity]public static extern voidlibvlc_media_player_release(IntPtr libvlc_mediaplayer);///

///解析视频资源的媒体信息(如时长等)///

///

[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]

[SuppressUnmanagedCodeSecurity]public static extern voidlibvlc_media_parse(IntPtr libvlc_media);///

///返回视频的时长(必须先调用libvlc_media_parse之后,该函数才会生效)///

///

///

[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]

[SuppressUnmanagedCodeSecurity]public static externInt64 libvlc_media_get_duration(IntPtr libvlc_media);#region 播放时间进度

///

///当前播放的时间进度///

///

///

[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]

[SuppressUnmanagedCodeSecurity]public static externInt64 libvlc_media_player_get_time(IntPtr libvlc_mediaplayer);///

///设置播放位置(拖动)///

///

///

[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]

[SuppressUnmanagedCodeSecurity]public static extern voidlibvlc_media_player_set_time(IntPtr libvlc_mediaplayer, Int64 time);#endregion

#region 音量

///

///获取音量///

///

///

[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]

[SuppressUnmanagedCodeSecurity]public static extern intlibvlc_audio_get_volume(IntPtr libvlc_media_player);///

///设置音量///

///

///

[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]

[SuppressUnmanagedCodeSecurity]public static extern void libvlc_audio_set_volume(IntPtr libvlc_media_player, intvolume);#endregion

///

///设置全屏///

///

///

[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]

[SuppressUnmanagedCodeSecurity]public static extern void libvlc_set_fullscreen(IntPtr libvlc_media_player, intisFullScreen);///

///获取播放状态。(Win10 不支持)///

///

///

//[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]//[SuppressUnmanagedCodeSecurity]//public static extern Int64 libvlc_media_player_get_state(IntPtr libvlc_mediaplayer);

}#endregion}

vlc集成c#_c# winform vlcPlayer播放器相关推荐

  1. c# winform vlcPlayer播放器

    vlcPlayer是一款免费开源的播放器项目,可以播放几乎所有的视频格式. 第一步:获取dll 安装vlcplayer视频播放器,在安装目录下面获取所需的dll. dll文件夹:plugins 还有2 ...

  2. vlc集成c#_C# Winform开发程序调用VLC播放器控件播放视频.

    VLC是个好东西,支持的格式多,还无广告,关键还有调用它的播放控件不用安装. 开个文章记录下调用这个控件的流水账,以便以后需要的时候查阅 创建工程 首先新建一个Winform工程. 这里姑且叫做VLC ...

  3. vlc集成c#_C#WinForm程序调用VLC异常

    问题描述 使用WinForm程序,调用VLC初始化实例时报异常,就是运行到libvlc_new(arguments.Length, argvPtr)方法时报的异常 异常消息:System.BadIma ...

  4. ijkplayer、VLC Player、SmartPlayer、ExoPlayer播放器比较

    ijkPlayer ijkPlayer是BiliBili公司维护的一个开源工程,基于ffmpeg开发的一个播放器软件,支持Android和iOS平台,整个ijkplayer就是以ffplay为基础,如 ...

  5. LZH_IJKPlayer-一个最简单使用的视频播放器,集成于bilibili开源直播播放器(ijkplayer)

    随着视频直播APP的迅速发展,许多APP也都会加入直播的功能,提高用户量.在网上也是寻找了许多直播的播放器,无意间发现Bilibili开源了一款播放器ijkplayer,想从最开始的步骤集成的同学可以 ...

  6. winform音频播放器(有声小说[凡人修仙传])

    该程序采用多线程的技术及DataGridView单元格扩展的技术 1.获取下载列表 private void GetDownList(){//System.Web.HttpUtility.UrlDec ...

  7. 前端web页面通过VUE集成H5直播、点播播放器LivePlayer

    基于VUE和webpck的前端工程 这里可以参考 https://github.com/livegbs/GB28181-Server 1.安装@liveqing/liveplayer npm -i @ ...

  8. 直播网站使用html5播放器,前端web页面通过VUE集成H5直播、点播播放器LivePlayer

    基于VUE和webpck的前端工程 1.安装@liveqing/liveplayer npm -i @liveqing/liveplayer --save-dev 2.webpack.config.j ...

  9. 媒体播放器的状态 winform

    媒体播放器的状态 winform 获得播放器的状态 控件刚加载状态 0 播放中的状态 3 暂停状态 2 继续播放 3 停止播放 1 重点的状态 3,播放 1,结束

最新文章

  1. vc中出现stack overflow错误(VS设置默认栈大小)
  2. WideCharToMultiByte和MultiByteToWideChar函数的用法(ascii转unicode unicode转ascii)
  3. mysql文件_mysql 的各种文件详细说明
  4. 在你的Android上执行Linux命令
  5. Oracle 子查询优化思路
  6. Android开发-Service(服务)
  7. asp长度为4的随机数字写
  8. pro、pre、test、dev环境
  9. File `xx.sty‘ not found——LaTex解决方案
  10. 阿里云Code设置ssh公钥
  11. sws_getContext函数详细使用
  12. CCF 201803-4棋局评估
  13. java 卷轴式_天堂1 java 编写活动卷轴方法
  14. HEVC码率控制TEncRCPic
  15. 任正非谈“狼文化”:华为没有 996,更没有 007
  16. 【安装教程】【FormatFactory(格式工厂)】(附带安装包下载)
  17. 手机 wifi上网跟4G上网的区别
  18. 键盘记录支持中文,3389(czy 原创)
  19. 实验3:二层直连式WLAN组网设计
  20. 蓝牙GPS运动检测bean

热门文章

  1. 安装turtle-0.0.2 和 pyinstaller
  2. 【知识分享】关于电子元器件封装的几个小知识(文末领资料)
  3. 运维工作常见问题处理74-100(三)
  4. 微信 html 压缩,微信视频过大如何发送 微信视频过大怎么压缩 微信怎样发送超过20M的视频...
  5. centos系统时区设置,美国西五区
  6. 对DataFrame离散值的列进行编码OrdinalEncoder()方法
  7. 计算机二级试题及分值分布,计算机二级各部分分值分布
  8. lis通道号_LIS系统功能模块和技术参数
  9. burst tx 功能 开启_锐速设置参数
  10. python自动化简历_python+selenium实现简历自动刷新的示例代码