分类:
2010-03-02 16:48:46
using System;
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)
{
byte[][] argvbytes = new byte[argv.Length][];
for (int i = 0; i < argv.Length; i++)
{
argvbytes[i] = Encoding.UTF8.GetBytes(argv[i]);
}
coreHandle = libvlc_new(argv.Length, ReturnIntPtr(argvbytes, argv.Length), ref ex);
}
//转换函数
private IntPtr ReturnIntPtr(byte[][] data, int length)
{
IntPtr[] dataIntPtrArr = new IntPtr[length];
for (int i = 0; i < length; i++)
{
dataIntPtrArr[i] = Marshal.AllocHGlobal(data[i].Length * sizeof(byte));
Marshal.Copy(data[i], 0, dataIntPtrArr[i], data[i].Length);
}
IntPtr dataIntPtr = Marshal.AllocHGlobal(length * Marshal.SizeOf(typeof(IntPtr)));
Marshal.Copy(dataIntPtrArr, 0, dataIntPtr, length);
return dataIntPtr;
}
//Dll动态导入
[DllImport("libvlc")]
private static extern CoreHandle libvlc_new(int argc, IntPtr argv, ref ExceptionStruct ex);
}
}
//avPath是本地存储路径,需要注意路径的\和/的问题。
argv = new string[] { "--sout=#duplicate{dst=display,dst=std{access=file,mux=ts,dst=" + avPath + "}}" };
//其他的就跟上一篇博客一样了。
core = new Core(argv, ref ex);
media = new Media(core.CoreHandle, link, ref ex);
player = new MediaPlayer(media.MediaHandle, ref ex);
player.Play(ref ex);//一面播放一面存储 本文出自 “Jeremiah的程序乐园” 博客,请务必保留此出处http://jeremiah.blog.51cto.com/539865/136931