0230204_FZLH_upperpc/fuqing/Nanji_Island/MediaPlayer.cs

886 lines
31 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using System.Threading;
using System.IO;
using System.Security;
namespace Nanji_Island
{
//定义替代变量
using libvlc_media_t = System.IntPtr;
using libvlc_media_player_t = System.IntPtr;
using libvlc_instance_t = System.IntPtr;
class MediaPlayer
{
#region
//数组转换为指针
internal struct PointerToArrayOfPointerHelper
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 11)]
public IntPtr[] pointers;
}
//vlc库启动参数配置
private static string pluginPath = System.Environment.CurrentDirectory + "\\plugins\\";
private static string plugin_arg = "--plugin-path=" + pluginPath;
//用于播放节目时,转录节目
private static string[] arguments = { "-I", "dummy", "--ignore-config", "--no-video-title",
"--network-caching=110", plugin_arg };
#region
public struct libvlc_media_stats_t
{
/* Input */
public int i_read_bytes;
public float f_input_bitrate;
/* Demux */
public int i_demux_read_bytes;
public float f_demux_bitrate;
public int i_demux_corrupted;
public int i_demux_discontinuity;
/* Decoders */
public int i_decoded_video;
public int i_decoded_audio;
/* Video Output */
public int i_displayed_pictures;
public int i_lost_pictures;
/* Audio output */
public int i_played_abuffers;
public int i_lost_abuffers;
/* Stream output */
public int i_sent_packets;
public int i_sent_bytes;
public float f_send_bitrate;
}
#endregion
#endregion
#region
/// <summary>
/// 创建VLC播放资源索引
/// </summary>
/// <param name="arguments"></param>
/// <returns></returns>
public static libvlc_instance_t Create_Media_Instance()
{
libvlc_instance_t libvlc_instance = IntPtr.Zero;
IntPtr argvPtr = IntPtr.Zero;
try
{
if (arguments.Length == 0 ||
arguments == null)
{
return IntPtr.Zero;
}
//将string数组转换为指针
argvPtr = StrToIntPtr(arguments);
if (argvPtr == null || argvPtr == IntPtr.Zero)
{
return IntPtr.Zero;
}
//设置启动参数
libvlc_instance = SafeNativeMethods.libvlc_new(arguments.Length, argvPtr);
if (libvlc_instance == null || libvlc_instance == IntPtr.Zero)
{
return IntPtr.Zero;
}
return libvlc_instance;
}
catch
{
return IntPtr.Zero;
}
}
/// <summary>
/// 释放VLC播放资源索引
/// </summary>
/// <param name="libvlc_instance">VLC 全局变量</param>
public static void Release_Media_Instance(libvlc_instance_t libvlc_instance)
{
try
{
if (libvlc_instance != IntPtr.Zero ||
libvlc_instance != null)
{
SafeNativeMethods.libvlc_release(libvlc_instance);
}
libvlc_instance = IntPtr.Zero;
}
catch (Exception)
{
libvlc_instance = IntPtr.Zero;
}
}
/// <summary>
/// 创建VLC播放器
/// </summary>
/// <param name="libvlc_instance">VLC 全局变量</param>
/// <param name="handle">VLC MediaPlayer需要绑定显示的窗体句柄</param>
/// <returns></returns>
public static libvlc_media_player_t Create_MediaPlayer(libvlc_instance_t libvlc_instance, IntPtr handle)
{
libvlc_media_player_t libvlc_media_player = IntPtr.Zero;
try
{
if (libvlc_instance == IntPtr.Zero ||
libvlc_instance == null ||
handle == IntPtr.Zero ||
handle == null)
{
return IntPtr.Zero;
}
//创建播放器
libvlc_media_player = SafeNativeMethods.libvlc_media_player_new(libvlc_instance);
if (libvlc_media_player == null || libvlc_media_player == IntPtr.Zero)
{
return IntPtr.Zero;
}
//设置播放窗口
SafeNativeMethods.libvlc_media_player_set_hwnd(libvlc_media_player, (int)handle);
return libvlc_media_player;
}
catch
{
SafeNativeMethods.libvlc_media_player_release(libvlc_media_player);
return IntPtr.Zero;
}
}
/// <summary>
/// 视频存储开始
/// </summary>
/// <param name="libvlc_media_player"></param>
/// <param name="url"></param>
public static void Save_MediaPlayer(libvlc_media_player_t libvlc_media_player, string url)
{
IntPtr pMrl = IntPtr.Zero;
try
{
if (url == null ||
libvlc_media_player == IntPtr.Zero ||
libvlc_media_player == null)
{
return;
}
pMrl = StrToIntPtr(url);
if (pMrl == null || pMrl == IntPtr.Zero)
{
return;
}
SafeNativeMethods.libvlc_media_player_recorder_start(libvlc_media_player, pMrl);
}
catch (Exception)
{
}
}
/// <summary>
/// 停止录像功能,存储
/// </summary>
/// <param name="libvlc_media_player"></param>
public static void UnSave_MediaPlayer(libvlc_media_player_t libvlc_media_player)
{
try
{
if (libvlc_media_player == IntPtr.Zero ||
libvlc_media_player == null)
{
return;
}
SafeNativeMethods.libvlc_media_player_recorder_stop(libvlc_media_player);
Console.WriteLine("保存成功");
}
catch (Exception err)
{
Console.WriteLine(err.Message);
}
}
/// <summary>
/// 释放媒体播放器
/// </summary>
/// <param name="libvlc_media_player">VLC MediaPlayer变量</param>
public static void Release_MediaPlayer(libvlc_media_player_t libvlc_media_player)
{
try
{
if (libvlc_media_player != IntPtr.Zero ||
libvlc_media_player != null)
{
if (SafeNativeMethods.libvlc_media_player_is_playing(libvlc_media_player))
{
SafeNativeMethods.libvlc_media_player_stop(libvlc_media_player);
}
SafeNativeMethods.libvlc_media_player_release(libvlc_media_player);
}
libvlc_media_player = IntPtr.Zero;
}
catch (Exception)
{
libvlc_media_player = IntPtr.Zero;
}
}
/// <summary>
/// 播放网络媒体
/// </summary>
/// <param name="libvlc_instance">VLC 全局变量</param>
/// <param name="libvlc_media_player">VLC MediaPlayer变量</param>
/// <param name="url">网络视频URL支持http、rtp、udp等格式的URL播放</param>
/// <returns></returns>
public static bool NetWork_Media_Play(libvlc_instance_t libvlc_instance, libvlc_media_player_t libvlc_media_player, string url)
{
IntPtr pMrl = IntPtr.Zero;
libvlc_media_t libvlc_media = IntPtr.Zero;
try
{
if (url == null ||
libvlc_instance == IntPtr.Zero ||
libvlc_instance == null ||
libvlc_media_player == IntPtr.Zero ||
libvlc_media_player == null)
{
return false;
}
pMrl = StrToIntPtr(url);
if (pMrl == null || pMrl == IntPtr.Zero)
{
return false;
}
//播放网络文件
libvlc_media = SafeNativeMethods.libvlc_media_new_location(libvlc_instance, pMrl);
if (libvlc_media == null || libvlc_media == IntPtr.Zero)
{
return false;
}
//将Media绑定到播放器上
SafeNativeMethods.libvlc_media_player_set_media(libvlc_media_player, libvlc_media);
//释放libvlc_media资源
SafeNativeMethods.libvlc_media_release(libvlc_media);
libvlc_media = IntPtr.Zero;
if (0 != SafeNativeMethods.libvlc_media_player_play(libvlc_media_player))
{
return false;
}
//休眠指定时间
Thread.Sleep(200);
return true;
}
catch (Exception)
{
//释放libvlc_media资源
if (libvlc_media != IntPtr.Zero)
{
SafeNativeMethods.libvlc_media_release(libvlc_media);
}
libvlc_media = IntPtr.Zero;
return false;
}
}
/// <summary>
/// 播放本地媒体
/// </summary>
/// <param name="libvlc_instance">VLC 全局变量</param>
/// <param name="libvlc_media_player">VLC MediaPlayer变量</param>
/// <param name="url">本地文件路径</param>
/// <returns></returns>
public static bool LocationPath_Media_Play(libvlc_instance_t libvlc_instance, libvlc_media_player_t libvlc_media_player, string url)
{
IntPtr pMrl = IntPtr.Zero;
libvlc_media_t libvlc_media = IntPtr.Zero;
try
{
if (url == null ||
libvlc_instance == IntPtr.Zero ||
libvlc_instance == null ||
libvlc_media_player == IntPtr.Zero ||
libvlc_media_player == null)
{
return false;
}
pMrl = StrToIntPtr(url);
if (pMrl == null || pMrl == IntPtr.Zero)
{
return false;
}
//播放网络文件
libvlc_media = SafeNativeMethods.libvlc_media_new_path(libvlc_instance, pMrl);
if (libvlc_media == null || libvlc_media == IntPtr.Zero)
{
return false;
}
//将Media绑定到播放器上
SafeNativeMethods.libvlc_media_player_set_media(libvlc_media_player, libvlc_media);
//释放libvlc_media资源
SafeNativeMethods.libvlc_media_release(libvlc_media);
libvlc_media = IntPtr.Zero;
if (0 != SafeNativeMethods.libvlc_media_player_play(libvlc_media_player))
{
return false;
}
//休眠指定时间
Thread.Sleep(200);
return true;
}
catch (Exception)
{
//释放libvlc_media资源
if (libvlc_media != IntPtr.Zero)
{
SafeNativeMethods.libvlc_media_release(libvlc_media);
}
libvlc_media = IntPtr.Zero;
return false;
}
}
/// <summary>
/// 暂停或恢复视频
/// </summary>
/// <param name="libvlc_media_player">VLC MediaPlayer变量</param>
/// <returns></returns>
public static bool MediaPlayer_Pause(libvlc_media_player_t libvlc_media_player)
{
try
{
if (libvlc_media_player == IntPtr.Zero ||
libvlc_media_player == null)
{
return false;
}
if (SafeNativeMethods.libvlc_media_player_can_pause(libvlc_media_player))
{
SafeNativeMethods.libvlc_media_player_pause(libvlc_media_player);
return true;
}
else
{
return false;
}
}
catch (Exception)
{
return false;
}
}
/// <summary>
/// 停止播放
/// </summary>
/// <param name="libvlc_media_player">VLC MediaPlayer变量</param>
/// <returns></returns>
public static bool MediaPlayer_Stop(libvlc_media_player_t libvlc_media_player)
{
try
{
if (libvlc_media_player == IntPtr.Zero ||
libvlc_media_player == null)
{
return false;
}
SafeNativeMethods.libvlc_media_player_stop(libvlc_media_player);
return true;
}
catch (Exception)
{
return false;
}
}
/// <summary>
/// 快进
/// </summary>
/// <param name="libvlc_media_player">VLC MediaPlayer变量</param>
/// <returns></returns>
public static bool MediaPlayer_Forward(libvlc_media_player_t libvlc_media_player)
{
double time = 0;
try
{
if (libvlc_media_player == IntPtr.Zero ||
libvlc_media_player == null)
{
return false;
}
if (SafeNativeMethods.libvlc_media_player_is_seekable(libvlc_media_player))
{
time = SafeNativeMethods.libvlc_media_player_get_time(libvlc_media_player) / 1000.0;
if (time == -1)
{
return false;
}
SafeNativeMethods.libvlc_media_player_set_time(libvlc_media_player, (Int64)((time + 30) * 1000));
return true;
}
else
{
return false;
}
}
catch (Exception)
{
return false;
}
}
/// <summary>
/// 快退
/// </summary>
/// <param name="libvlc_media_player">VLC MediaPlayer变量</param>
/// <returns></returns>
public static bool MediaPlayer_Back(libvlc_media_player_t libvlc_media_player)
{
double time = 0;
try
{
if (libvlc_media_player == IntPtr.Zero ||
libvlc_media_player == null)
{
return false;
}
if (SafeNativeMethods.libvlc_media_player_is_seekable(libvlc_media_player))
{
time = SafeNativeMethods.libvlc_media_player_get_time(libvlc_media_player) / 1000.0;
if (time == -1)
{
return false;
}
if (time - 30 < 0)
{
SafeNativeMethods.libvlc_media_player_set_time(libvlc_media_player, (Int64)(1 * 1000));
}
else
{
SafeNativeMethods.libvlc_media_player_set_time(libvlc_media_player, (Int64)((time - 30) * 1000));
}
return true;
}
else
{
return false;
}
}
catch (Exception)
{
return false;
}
}
/// <summary>
/// VLC MediaPlayer是否在播放
/// </summary>
/// <param name="libvlc_media_player">VLC MediaPlayer变量</param>
/// <returns></returns>
public static bool MediaPlayer_IsPlaying(libvlc_media_player_t libvlc_media_player)
{
try
{
if (libvlc_media_player == IntPtr.Zero ||
libvlc_media_player == null)
{
return false;
}
return SafeNativeMethods.libvlc_media_player_is_playing(libvlc_media_player);
}
catch (Exception)
{
return false;
}
}
/// <summary>
/// 录制快照
/// </summary>
/// <param name="libvlc_media_player">VLC MediaPlayer变量</param>
/// <param name="path">快照要存放的路径</param>
/// <param name="name">快照保存的文件名称</param>
/// <returns></returns>
public static bool TakeSnapShot(libvlc_media_player_t libvlc_media_player, string path, string name)
{
try
{
string snap_shot_path = null;
if (libvlc_media_player == IntPtr.Zero ||
libvlc_media_player == null)
{
return false;
}
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
snap_shot_path = path + "\\" + name;
if (0 == SafeNativeMethods.libvlc_video_take_snapshot(libvlc_media_player, 0, snap_shot_path.ToCharArray(), 0, 0))
{
return true;
}
else
{
return false;
}
}
catch (Exception)
{
return false;
}
}
/// <summary>
/// 获取信息
/// </summary>
/// <param name="libvlc_media_player"></param>
/// <returns></returns>
public static bool GetMedia(libvlc_media_player_t libvlc_media_player)
{
libvlc_media_t media = IntPtr.Zero;
try
{
if (libvlc_media_player == IntPtr.Zero ||
libvlc_media_player == null)
{
return false;
}
media = SafeNativeMethods.libvlc_media_player_get_media(libvlc_media_player);
if (media == IntPtr.Zero || media == null)
{
return false;
}
else
{
return true;
}
}
catch (Exception)
{
return false;
}
}
/// <summary>
/// 获取已经显示的图片数
/// </summary>
/// <param name="libvlc_media_player"></param>
/// <returns></returns>
public static int GetDisplayedPictures(libvlc_media_player_t libvlc_media_player)
{
libvlc_media_t media = IntPtr.Zero;
libvlc_media_stats_t media_stats = new libvlc_media_stats_t();
try
{
if (libvlc_media_player == IntPtr.Zero ||
libvlc_media_player == null)
{
return 0;
}
media = SafeNativeMethods.libvlc_media_player_get_media(libvlc_media_player);
if (media == IntPtr.Zero || media == null)
{
return 0;
}
if (1 == SafeNativeMethods.libvlc_media_get_stats(media, ref media_stats))
{
return media_stats.i_displayed_pictures;
}
else
{
return 0;
}
}
catch (Exception)
{
return 0;
}
}
/// <summary>
/// 设置全屏
/// </summary>
/// <param name="libvlc_media_player"></param>
/// <param name="isFullScreen"></param>
public static bool SetFullScreen(libvlc_media_player_t libvlc_media_player, int isFullScreen)
{
try
{
if (libvlc_media_player == IntPtr.Zero ||
libvlc_media_player == null)
{
return false;
}
SafeNativeMethods.libvlc_set_fullscreen(libvlc_media_player, isFullScreen);
return true;
}
catch (Exception)
{
return false;
}
}
#endregion
#region
//将string []转换为IntPtr
public static IntPtr StrToIntPtr(string[] args)
{
try
{
IntPtr ip_args = IntPtr.Zero;
PointerToArrayOfPointerHelper argv = new PointerToArrayOfPointerHelper();
argv.pointers = new IntPtr[11];
for (int i = 0; i < args.Length; i++)
{
argv.pointers[i] = Marshal.StringToHGlobalAnsi(args[i]);
}
int size = Marshal.SizeOf(typeof(PointerToArrayOfPointerHelper));
ip_args = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(argv, ip_args, false);
return ip_args;
}
catch (Exception)
{
return IntPtr.Zero;
}
}
//将string转换为IntPtr
private static IntPtr StrToIntPtr(string url)
{
try
{
if (string.IsNullOrEmpty(url))
{
return IntPtr.Zero;
}
IntPtr pMrl = IntPtr.Zero;
byte[] bytes = Encoding.UTF8.GetBytes(url);
pMrl = Marshal.AllocHGlobal(bytes.Length + 1);
Marshal.Copy(bytes, 0, pMrl, bytes.Length);
Marshal.WriteByte(pMrl, bytes.Length, 0);
return pMrl;
}
catch (Exception)
{
return IntPtr.Zero;
}
}
#endregion
#region
[SuppressUnmanagedCodeSecurity]
internal static class SafeNativeMethods
{
// 创建一个libvlc实例它是引用计数的
[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
internal static extern libvlc_instance_t libvlc_new(int argc, IntPtr argv);
// 释放libvlc实例
[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
internal static extern void libvlc_release(libvlc_instance_t libvlc_instance);
//获取libvlc的版本
[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
internal static extern String libvlc_get_version();
//从视频来源(例如http、rtsp)构建一个libvlc_meida
[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
internal static extern libvlc_media_t libvlc_media_new_location(libvlc_instance_t libvlc_instance, IntPtr path);
//从本地文件路径构建一个libvlc_media
[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
internal static extern libvlc_media_t libvlc_media_new_path(libvlc_instance_t libvlc_instance, IntPtr path);
//释放libvlc_media
[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
internal static extern void libvlc_media_release(libvlc_media_t libvlc_media_inst);
// 创建一个空的播放器
[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
internal static extern libvlc_media_player_t libvlc_media_player_new(libvlc_instance_t libvlc_instance);
//从libvlc_media构建播放器
[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
internal static extern libvlc_media_player_t libvlc_media_player_new_from_media(libvlc_media_t libvlc_media);
//释放播放器资源
[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
internal static extern void libvlc_media_player_release(libvlc_media_player_t libvlc_mediaplayer);
// 将视频(libvlc_media)绑定到播放器上
[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
internal static extern void libvlc_media_player_set_media(libvlc_media_player_t libvlc_media_player, libvlc_media_t libvlc_media);
// 设置图像输出的窗口
[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
internal static extern void libvlc_media_player_set_hwnd(libvlc_media_player_t libvlc_mediaplayer, Int32 drawable);
//播放器播放
[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
internal static extern int libvlc_media_player_play(libvlc_media_player_t libvlc_mediaplayer);
//播放器暂停
[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
internal static extern void libvlc_media_player_pause(libvlc_media_player_t libvlc_mediaplayer);
//播放器停止
[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
internal static extern void libvlc_media_player_stop(libvlc_media_player_t libvlc_mediaplayer);
// 解析视频资源的媒体信息(如时长等)
[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
internal static extern void libvlc_media_parse(libvlc_media_t libvlc_media);
// 返回视频的时长(必须先调用libvlc_media_parse之后该函数才会生效)
[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
internal static extern Int64 libvlc_media_get_duration(libvlc_media_t libvlc_media);
// 当前播放时间
[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
internal static extern Int64 libvlc_media_player_get_time(libvlc_media_player_t libvlc_mediaplayer);
// 设置播放时间
[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
internal static extern void libvlc_media_player_set_time(libvlc_media_player_t libvlc_mediaplayer, Int64 time);
// 获取音量
[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
internal static extern int libvlc_audio_get_volume(libvlc_media_player_t libvlc_media_player);
//设置音量
[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
internal static extern void libvlc_audio_set_volume(libvlc_media_player_t libvlc_media_player, int volume);
// 设置全屏
[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
internal static extern void libvlc_set_fullscreen(libvlc_media_player_t libvlc_media_player, int isFullScreen);
[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
internal static extern int libvlc_get_fullscreen(libvlc_media_player_t libvlc_media_player);
[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
internal static extern void libvlc_toggle_fullscreen(libvlc_media_player_t libvlc_media_player);
//判断播放时是否在播放
[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
internal static extern bool libvlc_media_player_is_playing(libvlc_media_player_t libvlc_media_player);
//判断播放时是否能够Seek
[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
internal static extern bool libvlc_media_player_is_seekable(libvlc_media_player_t libvlc_media_player);
//判断播放时是否能够Pause
[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
internal static extern bool libvlc_media_player_can_pause(libvlc_media_player_t libvlc_media_player);
//判断播放器是否可以播放
[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
internal static extern int libvlc_media_player_will_play(libvlc_media_player_t libvlc_media_player);
//进行快照
[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
internal static extern int libvlc_video_take_snapshot(libvlc_media_player_t libvlc_media_player, int num, char[] filepath, int i_width, int i_height);
//获取Media信息
[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
internal static extern libvlc_media_t libvlc_media_player_get_media(libvlc_media_player_t libvlc_media_player);
//获取媒体信息
[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
internal static extern int libvlc_media_get_stats(libvlc_media_t libvlc_media, ref libvlc_media_stats_t lib_vlc_media_stats);
[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
internal static extern void libvlc_media_add_option(libvlc_media_t p_md, String psz_option);
[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true, CharSet = CharSet.Ansi)]
internal static extern int libvlc_media_player_recorder_start(libvlc_media_player_t libvlc_media_player, IntPtr path);
[DllImport("libvlc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
internal static extern int libvlc_media_player_recorder_stop(libvlc_media_player_t libvlc_media_player);
}
#endregion
}
}