vlc的应用之三:动态调用vlc-0.9.4的libvlc.dll
来源:互联网 发布:ug加工编程步骤 编辑:程序博客网 时间:2024/06/07 11:18
本文出自 “海狗哥的流媒体空间” 博客,请务必保留此出处http://jeremiah.blog.51cto.com/539865/116981 原文地址有把程序代码作为附件供下载。
using System.Collections.Generic;
using System.Text;
namespace MyOwnPlayer
{
//异常结构体
public struct ExceptionStruct
{
private int raised;
private int code;
private string message;
}
class MediaException
{
}
}
using System.Runtime.InteropServices;
namespace MyOwnPlayer
{
class CoreHandle : SafeHandle
{
//构造方法
public CoreHandle()
: base(IntPtr.Zero, true)
{
}
//重写的方法
public override bool IsInvalid
{
get { return handle == IntPtr.Zero; }
}
protected override bool ReleaseHandle()
{
if (!IsInvalid)
{
libvlc_release(this);
handle = IntPtr.Zero;
}
return true;
}
protected override void Dispose(bool disposing)
{
ReleaseHandle();
base.Dispose(disposing);
}
//Dll动态导入
[DllImport("libvlc")]
private static extern void libvlc_release(CoreHandle coreHandle);
}
}
using System.Runtime.InteropServices;
namespace MyOwnPlayer
{
class Core
{
//coreHandle字段和属性
private CoreHandle coreHandle;
public CoreHandle CoreHandle
{
get { return coreHandle; }
}
//构造方法
public Core(string[] argv, ref ExceptionStruct ex)
{
coreHandle = libvlc_new(argv.Length, argv, ref ex);
}
//Dll动态导入
[DllImport("libvlc")]
private static extern CoreHandle libvlc_new(int argc, string[] args, ref ExceptionStruct ex);
}
}
using System.Runtime.InteropServices;
namespace MyOwnPlayer
{
class MediaHandle : SafeHandle
{
//构造方法
public MediaHandle()
: base(IntPtr.Zero, true)
{
}
//重写的方法
public override bool IsInvalid
{
get { return handle == IntPtr.Zero; }
}
protected override bool ReleaseHandle()
{
if (!IsInvalid)
{
libvlc_media_release(this);
handle = IntPtr.Zero;
}
return true;
}
protected override void Dispose(bool disposing)
{
ReleaseHandle();
base.Dispose(disposing);
}
//Dll动态导入
[DllImport("libvlc")]
private static extern void libvlc_media_release(MediaHandle mediaHandle);
}
}
using System.Text;
using System.Runtime.InteropServices;
namespace MyOwnPlayer
{
class Media
{
//mediaHandle字段和属性
private MediaHandle mediaHandle;
public MediaHandle MediaHandle
{
get { return mediaHandle; }
}
//构造方法
public Media(CoreHandle coreHandle, String filename, ref ExceptionStruct ex)
{
//c#为UTF-16编码, libvlc.dll为UTF-8编码, 需要转换.
UTF8Encoding utf8 = new UTF8Encoding();
mediaHandle = libvlc_media_new(coreHandle, utf8.GetBytes(filename), ref ex);
}
//Dll动态导入
[DllImport("libvlc")]
private static extern MediaHandle libvlc_media_new
(CoreHandle coreHandle, [MarshalAs(UnmanagedType.LPArray)] byte[] link, refExceptionStruct ex);
}
}
using System.Runtime.InteropServices;
namespace MyOwnPlayer
{
class MediaPlayerHandle : SafeHandle
{
//构造方法
public MediaPlayerHandle()
: base(IntPtr.Zero, true)
{
}
//重写的方法
public override bool IsInvalid
{
get { return handle == IntPtr.Zero; }
}
protected override bool ReleaseHandle()
{
if (!IsInvalid)
{
libvlc_media_player_release(this); handle = IntPtr.Zero;
}
return true;
}
protected override void Dispose(bool disposing)
{
ReleaseHandle();
base.Dispose(disposing);
}
//Dll动态导入
[DllImport("libvlc")]
private static extern void libvlc_media_player_release(MediaPlayerHandle mediaPlayerHandle);
}
}
using System.Runtime.InteropServices;
namespace MyOwnPlayer
{
class MediaPlayer
{
//mediaPlayerHandle字段和属性
private MediaPlayerHandle mediaPlayerHandle;
public MediaPlayerHandle MediaPlayerHandle
{
get { return mediaPlayerHandle; }
}
//构造方法
public MediaPlayer(MediaHandle mediaHandle, ref ExceptionStruct ex)
{
mediaPlayerHandle = libvlc_media_player_new_from_media(mediaHandle, ref ex);
}
//设置父窗口
public void VedioSetParent(CoreHandle coreHandle, IntPtr hDT, ref ExceptionStruct ex)
{
libvlc_video_set_parent(coreHandle, hDT, ref ex);
}
//播放
public void Play(ref ExceptionStruct ex)
{
libvlc_media_player_play(mediaPlayerHandle, ref ex);
}
//停止
public void Stop(ref ExceptionStruct ex)
{
libvlc_media_player_stop(mediaPlayerHandle, ref ex);
}
//Dll动态导入
[DllImport("libvlc")]
private static extern MediaPlayerHandle libvlc_media_player_new_from_media(MediaHandle libvlc_media_handle, ref ExceptionStruct ex);
[DllImport("libvlc")]
private static extern void libvlc_video_set_parent(CoreHandle coreHandle, IntPtr hDT, refExceptionStruct ex);
[DllImport("libvlc")]
private static extern void libvlc_media_player_play(MediaPlayerHandle mediaPlayerHandle,ref ExceptionStruct ex);
[DllImport("libvlc")]
private static extern void libvlc_media_player_stop(MediaPlayerHandle mediaPlayerHandle,ref ExceptionStruct ex);
}
}
{
//要播放的文件的uri
string uri = this.textBox1.Text;
//进行播放的控件的句柄
IntPtr hdl = this.panel1.Handle;
//播放参数
string[] argv = new string[] { "-I", "--ignore-config" };
//vlc对象的创建
ExceptionStruct ex = new ExceptionStruct();
Core core = new Core(argv, ref ex);
Media media = new Media(core.CoreHandle, uri, ref ex);
MediaPlayer player = new MediaPlayer(media.MediaHandle, ref ex);
//垃圾回收
GC.Collect();
//播放
player.VedioSetParent(core.CoreHandle, hdl, ref ex);
player.Play(ref ex);
//继续回收垃圾等相关操作
GC.Collect();
GC.WaitForPendingFinalizers();
}
- vlc的应用之三:动态调用vlc-0.9.4的libvlc.dll
- vlc的应用之三:动态调用vlc-0.9.4的libvlc.dll
- vlc的应用之八:MFC调用libvlc.dll
- vlc的应用之八:MFC调用libvlc.dll
- vlc的应用之八:MFC调用libvlc.dll
- vlc的应用之八:MFC调用libvlc.dll
- MFC调用vlc动态库libvlc.dll实现简单播放器(vlc2.0.0)
- MFC调用vlc动态库libvlc.dll实现简单播放器 中文路径处理
- MFC调用vlc动态库libvlc.dll实现简单播放器 中文路径处理
- windows平台下vlc编译之三:vlc-0.9.4的编译
- vlc的应用之二:vlc的ActiveX及cab
- vlc的应用之十一:修改vlc的界面文字
- vlc的应用之二:vlc的ActiveX及cab
- vlc的应用之二:vlc的ActiveX及cab
- vlc的应用之九:用vlc串流摄像头
- vlc的应用之九:用vlc串流摄像头
- vlc的应用之九:用vlc串流摄像头
- vlc的应用:vlc的远程控制
- 设计模式之桥接模式(Bridge)之三(典型结构图) 结构型模式
- JS。某鼠标滚轮事件。
- 正则表达式元字符
- 反射_02反射类型和泛型类型
- jetty入门
- vlc的应用之三:动态调用vlc-0.9.4的libvlc.dll
- Linux下强制T掉登录的用户
- 关于directfb-exmaple ./configure 中发现的问题
- HDU 2006 求奇数的乘积
- utf-8编码从ACCESS输出汉字出现乱码的解决
- 排序2
- 排序3
- BAT 读取ini配置文件方法
- 获取系统时间函数