N
O
D
E
M
E
D
I
A
Thinking
首页
产品
文档
博客
订单
文档
在c#中集成
2026年 5月 20日 下午3:55
## 简介 NodeMediaClient-Windows由c/c++开发,也可由c#调用。 ## 集成步骤 下载并解压开发包,拷贝dll到编译目录下 ### 1.注册dll ``` public partial class Form1 : Form { private IntPtr _libNodeMediaClientDll; private IntPtr _npHandle; private bool _isStarting; [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Ansi, BestFitMapping = false)] internal static extern IntPtr LoadLibrary(string dllToLoad); [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Ansi, BestFitMapping = false)] internal static extern IntPtr GetProcAddress(IntPtr hModule, string procedureName); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate IntPtr NodePlayer_new(byte[] domain, byte[] license); private NodePlayer_new _NodePlayer_new; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void NodePlayer_free(IntPtr handle); private NodePlayer_free _NodePlayer_free; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate int NodePlayer_start(IntPtr handle, byte[] url); private NodePlayer_start _NodePlayer_start; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate int NodePlayer_stop(IntPtr handle); private NodePlayer_stop _NodePlayer_stop; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate int NodePlayer_onResize(IntPtr handle); private NodePlayer_onResize _NodePlayer_onResize; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate int NodePlayer_attachView(IntPtr handle, IntPtr hwnd); private NodePlayer_attachView _NodePlayer_attachView; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate int NodePlayer_detachView(IntPtr handle); private NodePlayer_detachView _NodePlayer_detachView; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate int NodePlayer_setBufferTime(IntPtr handle,int bufferTime); private NodePlayer_setBufferTime _NodePlayer_setBufferTime; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate int NodePlayer_setScaleMode(IntPtr handle, int scaleMode); private NodePlayer_setScaleMode _NodePlayer_setScaleMode; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate int NodePlayer_setVolume(IntPtr handle, float volume); private NodePlayer_setVolume _NodePlayer_setVolume; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate int NodePlayer_setCryptoKey(IntPtr handle, byte[] cryptoKey); private NodePlayer_setCryptoKey _NodePlayer_setCryptoKey; ``` ### 2.创建播放对象 ``` public Form1() { InitializeComponent(); LoadDllDynamic(); if(_libNodeMediaClientDll != IntPtr.Zero) { _npHandle = _NodePlayer_new(GetUtf8Bytes(""), GetUtf8Bytes("")); } } private static byte[] GetUtf8Bytes(string s) { return Encoding.UTF8.GetBytes(s + "\0"); } private object GetDllType(Type type, string name) { IntPtr address = GetProcAddress(_libNodeMediaClientDll, name); if (address != IntPtr.Zero) return Marshal.GetDelegateForFunctionPointer(address, type); return null; } private void LoadDllDynamic() { _libNodeMediaClientDll = LoadLibrary("libNodeMediaClient.dll"); _NodePlayer_new = (NodePlayer_new)GetDllType(typeof(NodePlayer_new), "NodePlayer_new"); _NodePlayer_free = (NodePlayer_free)GetDllType(typeof(NodePlayer_free), "NodePlayer_free"); _NodePlayer_start = (NodePlayer_start)GetDllType(typeof(NodePlayer_start), "NodePlayer_start"); _NodePlayer_stop = (NodePlayer_stop)GetDllType(typeof(NodePlayer_stop), "NodePlayer_stop"); _NodePlayer_attachView = (NodePlayer_attachView)GetDllType(typeof(NodePlayer_attachView), "NodePlayer_attachView"); _NodePlayer_detachView = (NodePlayer_detachView)GetDllType(typeof(NodePlayer_detachView), "NodePlayer_detachView"); _NodePlayer_onResize = (NodePlayer_onResize)GetDllType(typeof(NodePlayer_onResize), "NodePlayer_onResize"); _NodePlayer_setBufferTime = (NodePlayer_setBufferTime)GetDllType(typeof(NodePlayer_setBufferTime), "NodePlayer_setBufferTime"); _NodePlayer_setScaleMode = (NodePlayer_setScaleMode)GetDllType(typeof(NodePlayer_setScaleMode), "NodePlayer_setScaleMode"); _NodePlayer_setVolume = (NodePlayer_setVolume)GetDllType(typeof(NodePlayer_setVolume), "NodePlayer_setVolume"); _NodePlayer_setCryptoKey = (NodePlayer_setCryptoKey)GetDllType(typeof(NodePlayer_setCryptoKey), "NodePlayer_setCryptoKey"); } ``` ### 3.设置视图 ``` var windowId = pictureBox1.Handle; _NodePlayer_attachView(_npHandle, windowId); ``` ### 4.开始播放 ``` private void button1_Click(object sender, EventArgs e) { if(_isStarting) { _NodePlayer_stop(_npHandle); button1.Text = "Start"; } else { var windowId = pictureBox1.Handle; _NodePlayer_attachView(_npHandle, windowId); _NodePlayer_setScaleMode(_npHandle,1); _NodePlayer_setBufferTime(_npHandle, 500); _NodePlayer_start(_npHandle, GetUtf8Bytes(textBox1.Text)); button1.Text = "Stop"; } _isStarting = !_isStarting; } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (_npHandle != IntPtr.Zero) { _NodePlayer_free(_npHandle); } } ``` ## 运行效果 
嘿,我是小R,需要帮助随时找我哦
QQ客服:281269007
邮件支持
扫码加微信
回到顶部