12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547 |
- /*
- * nt_smart_publisher_sdk.cs
- * nt_smart_publisher_sdk
- *
- * Github: https://github.com/daniulive/SmarterStreaming
- *
- * Created by DaniuLive on 2016/08/10.
- * Copyright © 2014~2017 DaniuLive. All rights reserved.
- */
- using System;
- using System.Runtime.InteropServices;
- using System.Text;
- namespace Vinno.vCloud.FIS.CrossPlatform.Windows.RTMPSDK
- {
- public class NTSmartPublisherSDK_x64
- {
- //2017-05-27++
- /*
- * 初始化接口
- *
- * flag:目前传0,后面扩展用
- * pReserve:传NULL,扩展用
- *
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_Init(UInt32 flag, IntPtr pReserve);
- /*
- * UnInit
- *
- * 这个是最后一个调用的接口
- *
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_UnInit();
- /*
- * Open
- *
- * video_option:请参考 NT_PB_E_VIDEO_OPTION
- * auido_option 请参考 NT_PB_E_AUDIO_OPTION
- * flag目前传0,后面扩展用
- * pReserve传NULL,扩展用
- *
- * 获取Handle
- *
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_Open(out IntPtr pHandle, UInt32 video_option, UInt32 auido_option, UInt32 flag, IntPtr pReserve);
- /*
- * Close
- *
- * 调用这个接口之后handle失效
- *
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_Close(IntPtr handle);
- /*
- * 设置推送的URL
- *
- * 支持同时推送到多个RTMP服务器上,最多可以同时支持推到三个服务器上
- * 为设置多个URL,请调用多次
- *
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetURL(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] String url, IntPtr pReserve);
- /*
- * 设置rtmp推送加密选项
- * url: 考虑到可能推送到多个服务器,可以根据推送url配置不同的加密选项, 请确保url和SetURL一致
- * is_encrypt_video: 1:表示视频加密, 0:表示视频不加密, 默认不加密, 其他值返回错误
- * is_encrypt_audio: 1:表示音频加密, 0:表示音频不加密, 默认不加密, 其他值返回错误
- *
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetRtmpEncryptionOption(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] String url, Int32 is_encrypt_video, Int32 is_encrypt_audio);
- /*
- * 设置rtmp加密算法
- * url: 考虑到可能推送到多个服务器,可以根据推送url配置不同的加密选项, 请确保url和SetURL一致
- * encryption_algorithm: 加密算法, 当前支持aes和国标sm4. 1为aes, 2为sm4, 默认为aes.
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetRtmpEncryptionAlgorithm(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] String url, Int32 encryption_algorithm);
- /*
- * 设置rtmp推送加密密钥
- * url: 考虑到可能推送到多个服务器,可以根据推送url配置不同的加密选项, 请确保url和SetURL一致
- * key:加密密钥
- * key_size: 如果加密算法是aes, key_size必须是16, 24, 32 这三个值, 其他返回错误; 如果加密算法是sm4, key_size必须是16, 其他值返回错误.
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetRtmpEncryptionKey(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] String url, byte[] key, UInt32 key_size);
- /*
- * 设置rtmp推送加密IV(初始化向量), 这个接口不调用的话, 将使用默认IV
- * url: 考虑到可能推送到多个服务器,可以根据推送url配置不同的加密选项, 请确保url和SetURL一致
- * iv: 初始化向量
- * iv_size: 当前必须是16, 其他值返回错误
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetRtmpEncryptionIV(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] String url, byte[] iv, UInt32 iv_size);
- /*
- * 设置视频包时间戳回调
- * url:推送url
- * min_call_interval:最小回调时间间隔(单位是毫秒), 如果是0的话,发送每个视频包时都会回调
- * callbackdata:回调时用户自定义数据
- * call_back:回调函数指针
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetVideoPacketTimestampCallBack(IntPtr handle,
- [MarshalAs(UnmanagedType.LPStr)] String url, UInt32 min_call_interval,
- IntPtr call_back_data, NT_PB_SDKVideoPacketTimestampCallBack call_back);
- /*
- * 设置推送状态回调
- * call_back_data: 回调时用户自定义数据
- * call_back
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetPublisherStatusCallBack(IntPtr handle, IntPtr call_back_data,
- NT_PB_SDKPublisherStatusCallBack call_back);
- /*
- * 启动推送
- *
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_StartPublisher(IntPtr handle, IntPtr pReserve);
- /*
- * 停止推送
- *
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_StopPublisher(IntPtr handle);
- /*+++发布rtsp流相关接口+++*/
- /*
- * 设置rtsp的流名称
- * stream_name: 流程名称,不能为空字符串,必须是英文
- * 这个作用是: 比如rtsp的url是:rtsp://192.168.0.111/test, test就是设置下去的stream_name
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetRtspStreamName(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] String stream_name);
- /*
- * 给要发布的rtsp流设置rtsp server, 一个流可以发布到多个rtsp server上,rtsp server的创建启动请参考OpenRtspServer和StartRtspServer接口
- * handle: 推送实例句柄
- * rtsp_server_handle:rtsp server句柄
- * reserve: 保留参数,传0
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_AddRtspStreamServer(IntPtr handle, IntPtr rtsp_server_handle, Int32 reserve);
- /*
- * * 清除设置的rtsp server
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_ClearRtspStreamServer(IntPtr handle);
- /*
- * 启动rtsp流
- * reserve: 保留参数,传0
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_StartRtspStream(IntPtr handle, Int32 reserve);
- /*
- * 停止rtsp流
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_StopRtspStream(IntPtr handle);
- /*+++推送rtsp相关接口+++*/
- /*
- * 设置推送rtsp传输方式
- * transport_protocol: 1表示UDP传输rtp包; 2表示TCP传输rtp包. 默认是1, UDP传输. 传其他值SDK报错。
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetPushRtspTransportProtocol(IntPtr handle, Int32 transport_protocol);
- /*
- * 设置推送RTSP的URL
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetPushRtspURL(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] String url);
- /*
- * 启动推送RTSP流
- * reserve: 保留参数,传0
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_StartPushRtsp(IntPtr handle, Int32 reserve);
- /*
- * 停止推送RTSP流
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_StopPushRtsp(IntPtr handle);
- /*---推送rtsp相关接口---*/
- /*---发布rtsp流相关接口---*/
- /*
- * 设置事件回调,如果想监听事件的话,建议调用Open成功后,就调用这个接口
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetEventCallBack(IntPtr handle, IntPtr call_back_data, NT_PB_SDKEventCallBack call_back);
- /*参数相关设置*/
- /*
- * 设置屏幕裁剪
- *
- * left: 屏幕左上角x位置
- * top: 屏幕左上角y位置
- * width: 宽度, 必须是16的倍数
- * height: 高度, 必须是16的倍数
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetScreenClip(IntPtr handle, UInt32 left, UInt32 top, UInt32 width, UInt32 height);
- /*
- * 移动屏幕剪切区域,这个接口只能推送或者录像中调用
- *
- * left: 屏幕左上角x位置
- * top: 屏幕左上角y位置
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_MoveScreenClipRegion(IntPtr handle, UInt32 left, UInt32 top);
- /*
- * 允许使用DXGI屏幕采集方式, 这种方式需要win8及以上系统才支持
- * is_enable: 1表示启用DXGI采集,0表示不启用, 其他值直接返回错误
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_EnableDXGIScreenCapturer(IntPtr handle, Int32 is_enable);
- /*
- * 采集屏幕时停用Aero, 这个只对win7有影响,win8及以上系统, 微软已经抛弃了Aero Glass效果
- * is_disable: 1:表示停用,如果设置为1的话,在win7系统上开始捕屏时可能黑屏闪烁一下, 0:表示不停用
- * sdk内部默认值是1
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_DisableAeroScreenCapturer(IntPtr handle, Int32 is_disable);
- /*
- * 在使用GDI方式采集屏幕时, 如果需要采集WS_EX_LAYERED属性窗口,设置成1
- * is_enable: 1表示采集WS_EX_LAYERED属性窗口, 0表示不采集WS_EX_LAYERED属性窗口. 默认系统是0,不采集.
- * 注意采集WS_EX_LAYERED属性窗口,鼠标会闪烁
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_EnableScreenCaptureLayeredWindow(IntPtr handle, Int32 is_enable);
- /*
- * 检查是否支持WR方式采集窗口
- * is_supported: 输出参数, 输出1表示支持, 0表示不支持
- * 注意:这个需要win10较高版本才支持
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_IsWRCaptureWindowSupported(ref Int32 is_supported);
- /*
- * 设置捕获窗口方式
- * way: 1使用GDI DC方式捕获, 2使用WR方式捕获, 默认是GDI DC方式
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetCaptureWindowWay(IntPtr handle, Int32 way);
- /*
- * 这个接口主要判断顶层窗口能否能被捕获, 如果不能被捕获的话返回NT_ERC_FAILED
- * 如果返回NT_ERC_OK,表示可能能捕获
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_CheckCapturerWindow(IntPtr hwnd);
- /*
- * 这个接口主要判断顶层窗口能否能被捕获, V2版本
- * capture_way: 这个请参考SetCaptureWindowWay说明
- * 如果不能被捕获的话返回NT_ERC_FAILED, 如果返回NT_ERC_OK,表示可能能捕获
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_CheckCapturerWindowV2(IntPtr hwnd, Int32 capture_way);
- /*
- * 设置要捕获的窗口的句柄
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetCaptureWindow(IntPtr handle, IntPtr hwnd);
- /*
- * 设置帧率
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetFrameRate(IntPtr handle, UInt32 frame_rate);
- /*
- * 获取摄像头数量
- *
- * pNumer: 返回设备数量
- *
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_GetVideoCaptureDeviceNumber(ref Int32 pNumer);
- /*
- * 返回摄像头设备信息
- *
- * device_index: 设备索引
- * device_name_utf8: 设备名称,传NULL将不返回名称,如果不是NULL的话, device_name_length必须大于等于256, 返回utf8编码的设备名称
- * device_name_length: 设备名称缓冲大小,如果device_name_utf8是NULL,则传入0, 否则必须大于等于256
- * device_unique_id_utf8: 设备唯一ID, 传NULL将不返回ID,如果不传NULL的话,device_unique_id_length必须大于等于1024,返回utf8编码的设备ID
- * device_unique_id_length: 设备唯一ID缓冲代销, 如果是device_unique_id_utf8NULL, 则传入0,否则必须大于等于1024
- *
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_GetVideoCaptureDeviceInfo(
- Int32 device_index,
- [MarshalAs(UnmanagedType.LPStr)] StringBuilder device_name_utf8,
- UInt32 device_name_length,
- [MarshalAs(UnmanagedType.LPStr)] StringBuilder device_unique_id_utf8,
- UInt32 device_unique_id_length
- );
- /*
- * 返回摄像头能力数
- *
- * device_unique_id_utf8: 设备唯一id
- * capability_number: 返回的设备能力数
- *
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_GetVideoCaptureDeviceCapabilityNumber(
- [MarshalAs(UnmanagedType.LPStr)] String device_unique_id_utf8,
- ref Int32 capability_number
- );
- /*
- * 返回摄像头能力
- *
- * device_unique_id_utf8: 设备唯一id
- * device_capability_index: 设备能力索引
- * capability: 设备能力
- *
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll", EntryPoint = "NT_PB_GetVideoCaptureDeviceCapability", CallingConvention = CallingConvention.StdCall)]
- public static extern UInt32 NT_PB_GetVideoCaptureDeviceCapability(
- [MarshalAs(UnmanagedType.LPStr)] String device_unique_id_utf8,
- Int32 device_capability_index,
- ref NT_PB_VideoCaptureCapability capability);
- /*
- * 在多个实例推送多路时,对于一个摄像头来说,所有实例只能共享摄像头,那么只有一个实例可以改变摄像头分辨率,
- * 其他实例使用这个缩放后的图像.
- * 在使用多实例时,调用这个接口禁止掉实例的分辨率设置能力.只留一个实例能改变分辨,如果不设置,行为
- * 未定义.
- * 这个接口必须在 SetLayersConfig, AddLayerConfig 之前调用
- * device_unique_id_utf8: 设备唯一id
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll", EntryPoint = "NT_PB_DisableVideoCaptureResolutionSetting", CallingConvention = CallingConvention.StdCall)]
- public static extern UInt32 NT_PB_DisableVideoCaptureResolutionSetting(
- IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] String device_unique_id_utf8);
- /*
- * 启动摄像头预览
- *
- * device_unique_id_utf8: 设备唯一id
- * hwnd: 绘制的窗口句柄
- *
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_StartVideoCaptureDevicePreview(
- [MarshalAs(UnmanagedType.LPStr)] String device_unique_id_utf8,
- IntPtr hwnd
- );
- /*
- * 上下反转摄像头预览图像
- * is_flip: 1:表示反转, 0:表示不反转
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_FlipVerticalCameraPreview(IntPtr hwnd, Int32 is_flip);
- /*
- * 水平反转摄像头预览图像
- * is_flip: 1:表示反转, 0:表示不反转
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_FlipHorizontalCameraPreview(IntPtr hwnd, Int32 is_flip);
- /*
- * 旋转摄像头预览图像, 顺时针旋转
- * degress: 设置0, 90, 180, 270度有效,其他值无效
- * 注意:除了0度,其他角度播放会耗费更多CPU
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_RotateCameraPreview(IntPtr hwnd, Int32 degress);
- /*
- * 告诉SDK预览窗口大小改变
- *
- * hwnd: 绘制的窗口句柄
- *
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_VideoCaptureDevicePreviewWindowSizeChanged(IntPtr hwnd);
- /*
- * 停止摄像头预览
- *
- * hwnd: 绘制的窗口句柄
- *
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_StopVideoCaptureDevicePreview(IntPtr hwnd);
- /***************************/
- /*****获取摄像头RBG32图像接口++/
- /***************************/
- /*
- 调用流程:
- 1. NT_PB_StartGetVideoCaptureDeviceImage 获取句柄,且保存句柄
- 2. NT_PB_GetVideoCaptureDeviceImage 获取图像
- 3. NT_PB_StopGetVideoCaptureDeviceImage 停止,之后句柄将无效
- */
- /*
- * 调用此接口前置条件: 必须调用过Init接口, 否则会奔溃或失败
- *
- * pVideoCaptrueImageHandle: 要返回的句柄的指针,请不要和其他句柄搞混
- * device_unique_id_utf8: 设备唯一id
- *
- * 成功返回 NT_ERC_OK 并返回VideoCaptrueImageHandle句柄
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_StartGetVideoCaptureDeviceImage(
- IntPtr pVideoCaptrueImageHandle,
- [MarshalAs(UnmanagedType.LPStr)] String device_unique_id_utf8
- );
- /*
- * 上下反转设备图像
- * is_flip: 1:表示反转, 0:表示不反转
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_FlipVerticalVideoCaptureDeviceImage(IntPtr videoCaptrueImageHandle, Int32 is_flip);
- /*
- * 水平反转设备图像
- * is_flip: 1:表示反转, 0:表示不反转
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_FlipHorizontalVideoCaptureDeviceImage(IntPtr videoCaptrueImageHandle, Int32 is_flip);
- /*
- * 旋转设备图像, 顺时针旋转
- * degress: 设置0, 90, 180, 270度有效,其他值无效
- * 注意:除了0度,其他角度播放会耗费更多CPU
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_RotateVideoCaptureDeviceImage(IntPtr videoCaptrueImageHandle, Int32 degress);
- /*
- * 调用这个接口可以获取摄像头图像
- *
- * videoCaptrueImageHandle:句柄, 通过NT_PB_StartGetVideoCaptureDeviceImage得到
- *
- * isDiscardImage: 1:表示取到图像后,就把SDK内部保存的图像删除掉
- * 0:表示取到图像后, SDK内部的图像不删除,那么下一次再调用这个接口的时候,如果摄像头没有产生新的图像,就会返回上次返回过的图像
- *
- * ppImage: 指向图像指针的指针,如果有图像的话, 会填充 *ppImage
- *
- * 返回值:
- * NT_ERC_OK: 表示取到图像, *ppImage必然有值
- * NT_ERC_PB_NO_IMAGE: 表示SDK内部目前没有图像,需要等待摄像头产生图像
- * 其他值: 可能是其他错误,比如参数错误等等
- *
- * 注意:
- * 1. 这个接口返回的图像 宽和高可能会变,就是说每一次调用返回的图像宽高可能不一样
- * 2. 取到的图像是从上到下的
- */
- [DllImport(@"x64\SmartPublisherSDK.dll", EntryPoint = "NT_PB_GetVideoCaptureDeviceImage", CallingConvention = CallingConvention.StdCall)]
- public static extern UInt32 NT_PB_GetVideoCaptureDeviceImage(
- IntPtr videoCaptrueImageHandle,
- Int32 isDiscardImage,
- ref NT_PB_Image ppImage
- );
- /*
- * 停止获取摄像头图像
- *
- * 成功返回 NT_ERC_OK
- *
- * 注意:必须在调用NT_PB_UnInit之前调用
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_StopGetVideoCaptureDeviceImage(
- IntPtr videoCaptrueImageHandle
- );
- /***************************/
- /*****获取摄像头RBA32图像接口--/
- /***************************/
- /*
- * 设置摄像头信息
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetVideoCaptureDeviceBaseParameter(
- IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] String device_unique_id_utf8, UInt32 width, UInt32 height);
- /*
- * 上下反转摄像头图像
- * is_flip: 1:表示反转, 0:表示不反转
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_FlipVerticalCamera(IntPtr handle, Int32 is_flip);
- /*
- * 水平反转摄像头图像
- * is_flip: 1:表示反转, 0:表示不反转
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_FlipHorizontalCamera(IntPtr handle, Int32 is_flip);
- /*
- * 旋转摄像头图像, 顺时针旋转
- * degress: 设置0, 90, 180, 270度有效,其他值无效
- * 注意:除了0度,其他角度播放会耗费更多CPU
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_RotateCamera(IntPtr handle, Int32 degress);
- /*
- * 设置视频合成层, 传入的是一个数组, 请正确填充每一层
- *
- * reserve: 这个参数保留, 当前请传0
- * confs: 层配置数组
- * count: 数组大小
- * flag: 目前传0
- * pReserve: 保留将来用
- *
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll", EntryPoint = "NT_PB_SetLayersConfig", CallingConvention = CallingConvention.StdCall)]
- public static extern UInt32 NT_PB_SetLayersConfig(IntPtr handle, Int32 reserve,
- [MarshalAs(UnmanagedType.LPArray)] ref NT_PB_LayerBaseConfig[] confs,
- Int32 count,
- UInt32 flag, IntPtr pReserve);
- /*
- * 清除所有层配置,注意这个接口只能在推送或者录像之前调用,否则结果未定义
- *
- * 这个接口主要是给C#使用,C++请直接使用SetLayersConfig
- *
- * reserve: 这个参数保留, 当前请传0
- * flag: 目前传0
- * pReserve: 保留将来用
- *
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll", EntryPoint = "NT_PB_ClearLayersConfig", CallingConvention = CallingConvention.StdCall)]
- public static extern UInt32 NT_PB_ClearLayersConfig(IntPtr handle, Int32 reserve,
- UInt32 flag, IntPtr pReserve);
- /*
- * 增加层配置,注意这个接口只能在推送或者录像之前调用,否则结果未定义
- *
- * 这个接口主要是给C#使用,C++请直接使用SetLayersConfig
- *
- * reserve: 这个参数保留,当前请传0
- * conf: 配置层
- * layer_type: 层类型
- * flag: 目前传0
- * pReserve: 保留将来用
- * 00000
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll", EntryPoint = "NT_PB_AddLayerConfig", CallingConvention = CallingConvention.StdCall)]
- public static extern UInt32 NT_PB_AddLayerConfig(IntPtr handle, Int32 reserve,
- IntPtr conf, Int32 layer_type,
- UInt32 flag, IntPtr pReserve);
- /*
- * 动态禁止或者启用层
- *
- * index: 层索引, 不能是第0层,如果传0的话,会失败
- * reserve: 保留字段,请传0
- * is_enable: 1表示能用,0表示禁止, 其他值直接返回错误
- *
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_EnableLayer(IntPtr handle, Int32 reserve,
- Int32 index, Int32 is_enable);
- /*
- * 这个接口是给C#使用的, C++请使用上面的UpdateLayerConfig接口
- *
- * 更新层相关配置, 注意不是层的所有字段都可以更新,只是部分可以更新,并且有些层没有字段可以更新
- * 传入的参数,SDK只选择能更新的字段更新,不能更新的字段会被忽略
- * reserve: 保留字段,请传0
- * conf: 配置
- * flag: 请传0
- * pReserve: 保留字段,请传0
- *
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll", EntryPoint = "NT_PB_UpdateLayerConfigV2", CallingConvention = CallingConvention.StdCall)]
- public static extern UInt32 NT_PB_UpdateLayerConfigV2(IntPtr handle, Int32 reserve,
- IntPtr conf, Int32 layer_type,
- UInt32 flag, IntPtr pReserve);
- /*
- * 修改层区域
- *
- * pReserve: 保留字段,请传0
- *
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll", EntryPoint = "NT_PB_UpdateLayerRegion", CallingConvention = CallingConvention.StdCall)]
- public static extern UInt32 NT_PB_UpdateLayerRegion(IntPtr handle, Int32 reserve,
- Int32 index, ref NT_PB_RectRegion region);
- /*
- * 给index层投递Image数据,目前主要是用来把rgb和yuv视频数据传给相关层
- * reserve: 保留字段,请传0
- * index: 层索引
- * image: 图像
- * flag: 请传0
- * pReserve: 保留字段,请传0
- *
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll", EntryPoint = "NT_PB_PostLayerImage", CallingConvention = CallingConvention.StdCall)]
- public static extern UInt32 NT_PB_PostLayerImage(IntPtr handle, Int32 reserve,
- Int32 index, IntPtr image,
- UInt32 flag, IntPtr pReserve);
- /*+++视频截屏相关接口+++*/
- /*
- * 捕获图片
- * file_name_utf8: 文件名称,utf8编码
- * call_back_data: 回调时用户自定义数据
- * call_back: 回调函数,用来通知用户截图已经完成或者失败
- * 成功返回 NT_ERC_OK
- * 只有在推送或者录像时调用才可能成功,其他情况下调用,返回错误.
- * 因为生成PNG文件比较耗时,一般需要几百毫秒,为防止CPU过高,SDK会限制截图请求数量,当超过一定数量时,
- * 调用这个接口会返回NT_ERC_PB_TOO_MANY_CAPTURE_IMAGE_REQUESTS. 这种情况下, 请延时一段时间,等SDK处理掉一些请求后,再尝试.
- */
- [DllImport(@"x64\SmartPublisherSDK.dll", EntryPoint = "NT_PB_CaptureImage", CallingConvention = CallingConvention.StdCall)]
- public static extern UInt32 NT_PB_CaptureImage(IntPtr handle, IntPtr file_name_utf8,
- IntPtr call_back_data, NT_PB_SDKCaptureImageCallBack call_back);
- /*---视频截屏相关接口---*/
- /*+++视频编码相关接口+++*/
- /*
- * 获取视频硬编码器信息数
- * count: 返回的数量
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_GetHWVideoEncoderInfoCount(ref Int32 count);
- /*
- * 获取视频硬编码信息
- * infos: 请先调用GetHWVideoEncoderInfoCount, 然后分配这个数组
- * info_array_size: 分配的数组大小
- * out_count: 实际返回的数量
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_GetHWVideoEncoderInfos(IntPtr infos, Int32 info_array_size, ref Int32 out_count);
- /*
- * 设置软硬编码类型, 编码器, codec_id, 编码器其他参数.
- * type: 0为软编码, 1为硬编码, 默认是软编码.
- * encoder_id: 如果是软编码, 并且用h264, 可以设置0, 0用默认编码器, 也可以设置1, 设置1将使用OpenH264编码. 如果不是h264, 请设置成0; 如果是硬编码, 128为NVIDIA video encoder (NVENC), 填其他值接口返回错误.
- * param1: 如果是软编码,请设置0; 如果是硬编码且是NVENC, 这个参数用来设置GPU index, 设置-1的话SDK自动选择GPU.
- * codec_id: 设置h264或h265编码, 默认是h264, 请参考NT_MEDIA_CODEC_ID, h264填 NT_MEDIA_CODEC_ID_H264, h265填 NT_MEDIA_CODEC_ID_H265.
- * 注意: 软编码不支持h265, 硬编码根据实际硬件情况决定是否支持h265.
- * 如果调用了这个接口,请不要再调用SetVideoEncoderType接口
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetVideoEncoder(IntPtr handle, Int32 type, Int32 encoder_id, UInt32 codec_id, Int32 param1);
- /*
- * 这个接口已经废弃, 请使用SetVideoEncoder接口
- *
- * 设置编码类型, 当前支持h264和h265(注意:h265只有64位sdk库支持, 在32位库上设置会失败)
- *
- * encoder_type: 1为h264, 2为h265, 默认为h264
- *
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetVideoEncoderType(IntPtr handle, Int32 encoder_type);
- /*
- * 注意,码率控制两种方式,要么是 SetVideoQuality + SetVideoMaxBitRate
- * 要么是 SetVideoMaxBitRate + SetVideoBitRate
- * 对于OpenH264, 只支持 SetVideoMaxBitRate + SetVideoBitRate方式
- */
- /*
- * 设置视频质量, 范围[0-20], 默认是10, 值越小质量越好,但码率会越大
- * 建议用NT_PB_SetVideoQualityV2(注意:请看v2具体参数和范围)
- * 注意:用OpenH264编码器时调用这个接口无用
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetVideoQuality(IntPtr handle, Int32 quality);
- /*
- * 设置视频质量, 范围[1-50], 值越小视频质量越好,但码率会越大. 请优先考虑默认值
- *
- * 对于H264, 默认值23
- * 对于H265, 默认值28
- * 注意:用OpenH264编码器时调用这个接口无用
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetVideoQualityV2(IntPtr handle, Int32 quality);
- /*
- * 设置最大视频码率, 单位kbps
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetVideoMaxBitRate(IntPtr handle, Int32 kbit_rate);
- /*
- * 设置视频码率, 单位kbps, 默认是0,不使用平均码率方式
- * 注意:用OpenH264编码器时调需要设置适当的值
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetVideoBitRate(IntPtr handle, Int32 kbit_rate);
- /*
- * 在一些特殊场景下, 视频分辨率会改变, 如果设置一个固定码率的的话,当视频分辨率变大的时候会变的模糊,变小的话又会浪费码率
- * 所以提供可以设置一组码率的接口,满足不同分辨率切换的需求
- * 规则: 比如设置两组分辨率 640*360, 640*480, 那么当分辨率小于等于640*360时都使用640*360的码率,
- * 当分辨率大于640*360且小于等于640*480时,就使用640*480的码率,如果分辨率大于640*480 那就使用640*480的分辨率
- * 为了设置的更准确, 建议多划分几组, 让区间变小
- * 调用这个接口每次设置一组,设置多组就调用多次
- * item对应 NT_PB_VideoEncoderBitrateGroupItem
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_AddVideoEncoderBitrateGroupItem(IntPtr handle, IntPtr item);
- /*
- * 清除视频码率组
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_ClearVideoEncoderBitrateGroup(IntPtr handle);
- /*
- * 设置关键帧间隔, 比如1表示所有帧都是关键帧,10表示每10帧里面一个关键帧,25表示每25帧一个关键帧
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetVideoKeyFrameInterval(IntPtr handle, Int32 interval);
- /*
- * 设置H264 profile.
- *
- * profile: 1: H264 baseline(默认值). 2: H264 main. 3. H264 high
- * 注意:用OpenH264编码器时不支持main profile, 如果设置成main profile的话,会回落到baseline profile.
- *
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetVideoEncoderProfile(IntPtr handle, Int32 profile);
- /*
- * 设置视频编码速度
- *
- * speed: 范围是 1 到 6, 值越小,速度越快,质量也越差
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetVideoEncoderSpeed(IntPtr handle, Int32 speed);
- /*
- * 设置视频编码量化范围, 设置最小值
- * qp_min: h264和h265设置范围都是[0, 51], 设置-1的话,编码器使用默认值;
- * 注意目前只对OpenH264有效
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetVideoEncoderQPMin(IntPtr handle, Int32 qp_min);
- /*
- * 设置视频编码量化范围, 设置最小值
- * qp_max: h264和h265设置范围都是[0, 51], 设置-1的话,编码器使用默认值;
- * 注意目前只对OpenH264有效
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetVideoEncoderQPMax(IntPtr handle, Int32 qp_max);
- /*
- * 不同的视频编码器一般会有一些特定的选项, 这个接口可以设置这些选项
- * option_name: 选项名称
- * option_value: 选项值
- * 成功返回 NT_ERC_OK
- * ********************************************
- * ***********OpenH264选项说明******************
- * 可以设置的选项有: "usage_type", "rc_mode", "enable_frame_skip"
- * "usage_type": 编码场景, 可以设置0和1, 0是实时摄像头编码, 1是实时屏幕编码, sdk默认是0;
- * "rc_mode": 码率控制模式, 可以设置0和1, 0是质量模式, 1是码率模式, sdk默认是1;
- * "enable_frame_skip": 通过跳帧的方式来控制码率, 设置0是关闭跳帧, 1是打开跳帧, sdk默认是0;
- * ***********OpenH264选项说明******************
- * ********************************************
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetVideoEncoderSpecialInt32Option(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] String option_name, Int32 option_value);
- /*
- * 清除编码器所有设置的特定选项
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_ClearVideoEncoderSpecialOptions(IntPtr handle);
- /*
- * 这个接口已经被废弃,请不要调用它.
- * 设置是否对图像进行相同比较,相同图像比较一般在采集桌面时有一定好处,可能能降低码率
- * is_compare_image: 1:表示比较, 0:表示不比较, 其他值无效
- * max_frame_interval:
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetVideoCompareSameImage(IntPtr handle, Int32 is_compare_image, UInt32 max_frame_interval);
- /*
- * 这个接口已经被废弃,请不要调用它.
- * 设置视频最大关键帧间隔, 这个接口一般不使用,这里是用来配合SetVideoCompareSameImage接口的.
- * 比如开启图像比较后,SDK发现连续20s图像都是相同的,但播放端需要收到关键帧才能解码播放,所以需要一个限制.
- * interval:单位是毫秒,请和SetVideoKeyFrameInterval接口区分开,他们的参数设置方式是不同的
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetVideoMaxKeyFrameInterval(IntPtr handle, Int32 interval);
- /*+++音频相关接口+++*/
- /*
- * 获取系统音频输入设备数
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_GetAuidoInputDeviceNumber(ref Int32 pNumer);
- /*
- * 获取音频输入设备名称
- *
- * device_id: 设备ID,需要输入,从0开始,最大值不能超过设备数
- * device_name_buff: 设备名称,返回的字符串以0结尾
- * device_name_buff_size: 设备名称buffer的大小,建议512
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_GetAuidoInputDeviceName(UInt32 device_id, byte[] device_name_buff, UInt32 device_name_buff_size);
- /*
- * 设置推送音频编码类型
- *
- * type: 1:使用AAC编码, 2:使用speex编码, 其他值返回错误
- *
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetPublisherAudioCodecType(IntPtr handle, Int32 type);
- /*
- * 设置推送Speex编码质量
- *
- * quality: 范围是0-10, 默认是8:大约28kbps, 值越大,质量越好,码率也越大
- *
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetPublisherSpeexEncoderQuality(IntPtr handle, Int32 quality);
- /*
- * 设置推送静音
- * is_mute: 0表示不静音, 1表示静音
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetMute(IntPtr handle, Int32 is_mute);
- /*
- * 设置音频输入设备ID
- *
- * device_id: 设备id, 一般从0开始
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetAuidoInputDeviceId(IntPtr handle, UInt32 device_id);
- /*
- * 检查是否能捕获扬声器音频
- *
- * out_flag: 1表示可以捕获扬声器,0:表示不可以捕获扬声器
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_IsCanCaptureSpeaker(ref Int32 out_flag);
- /*
- *设置采集扬声器时是否补偿静音帧 这个只在auido_option是NT_PB_E_AUDIO_OPTION_CAPTURE_SPEAKER有效
- *is_compensation: 1表示补偿, 0表示补偿, 设置其他值无效
- *成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetCaptureSpeakerCompensateMute(IntPtr handle, Int32 is_compensation);
- /*
- * 设置回音消除
- *
- * isCancel:1表示消除回音,0表示不消除回音
- * delay: 回音时延,单位是毫秒,目前推荐设置100ms, 如果设置为0的话,将使用100ms
- * 注意这个只对麦克风捕获有作用,扬声器捕获无效
- *
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetEchoCancellation(IntPtr handle, Int32 isCancel, Int32 delay);
- /*
- * 设置音频噪音抑制
- *
- * isNS: 1表示噪音抑制, 0表示不抑制
- * 注意,这个一般用在采集麦克风上,采集系统播放声音时必须要性不大
- *
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetNoiseSuppression(IntPtr handle, Int32 isNS);
- /*
- * 设置音频自动增益控制
- *
- * isAGC: 1表示增益控制, 0表示不控制
- * 注意,这个一般用在采集麦克风上,采集系统播放声音时必须要性不大
- *
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetAGC(IntPtr handle, Int32 isAGC);
- /*
- * 设置端点检测(Voice Activity Detection (VAD))
- *
- * isVAD: 1表示端点检测, 0表示不检测
- * 注意,这个一般用在采集麦克风上,采集系统播放音乐声音时效果不好
- *
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetVAD(IntPtr handle, Int32 isVAD);
- /*
- *设置输入音量, 这个接口一般不建议调用, 在一些特殊情况下可能会用, 一般不建议放大音量
- *index: 一般是0和1, 如果没有混音的只用0, 有混音的话, 0,1分别设置音量
- *volume: 音量,默认是1.0,范围是[0.0, 5.0], 设置成0静音, 1音量不变
- *成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetInputAudioVolume(IntPtr handle, Int32 index, float volume);
- /*+++录像相关接口+++*/
- /*
- * 设置本地录像目录, 必须是英文目录,否则会失败
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetRecorderDirectory(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] String dir, IntPtr pReserve);
- /*
- * 设置单个录像文件最大大小, 当超过这个值的时候,将切割成第二个文件
- *
- * size: 单位是KB(1024Byte), 当前范围是 [5MB-1G], 超出将被设置到范围内
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetRecorderFileMaxSize(IntPtr handle, UInt32 size);
- /*
- * 设置录像文件名生成规则
- */
- [DllImport(@"x64\SmartPublisherSDK.dll", EntryPoint = "NT_PB_SetRecorderFileNameRuler", CallingConvention = CallingConvention.StdCall)]
- public static extern UInt32 NT_PB_SetRecorderFileNameRuler(IntPtr handle, ref NT_PB_RecorderFileNameRuler ruler);
- /*
- * 启动录像
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_StartRecorder(IntPtr handle, IntPtr pReserve);
- /*
- * 暂停录像
- *
- * is_pause: 1表示暂停, 0表示恢复录像, 输入其他值将调用失败
- *
- * 成功返回NT_ERC_OK
- * 返回NT_ERC_PB_NEED_RETRY, 请隔一段时间再尝试调用
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_PauseRecorder(IntPtr hanlde, Int32 is_pause);
- /*
- * 停止录像
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_StopRecorder(IntPtr handle);
- /*+++预览相关接口+++*/
- /*
- * 设置预览图像回调
- * image_format: 请参考NT_PB_E_IMAGE_FORMAT,只能是NT_PB_E_IMAGE_FORMAT_RGB32, NT_PB_E_IMAGE_FORMAT_I420
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetVideoPreviewImageCallBack(IntPtr handle, Int32 image_format, IntPtr call_back_data, NT_PB_SDKVideoPreviewImageCallBack call_back);
- /*
- * 启动预览
- * reserve1: 保留参数传0
- * pReserve2: 保留参数传NULL
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_StartPreview(IntPtr handle, UInt32 reserve1, IntPtr pReserve2);
- /*
- * 停止预览
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_StopPreview(IntPtr handle);
- /*---预览相关接口---*/
- /*
- * 投递编码过的视频数据给SDK
- * codec_id:请参考NT_MEDIA_CODEC_ID, 注意不要传递auido codec id,否则结果没有定义
- * data: 编码数据
- * size: 编码数据大小
- * is_key_frame: 1:表示是关键帧, 0:表示不是
- * timestamp: 时间戳
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_PostVideoEncodedData(IntPtr handle, UInt32 codec_id,
- IntPtr data, UInt32 size,
- Int32 is_key_frame, UInt64 timestamp);
- /*
- * 投递编码过的视频数据给SDK V2版
- * codec_id:请参考NT_MEDIA_CODEC_ID, 注意不要传递auido codec id,否则结果没有定义
- * data: 编码数据
- * size: 编码数据大小
- * is_key_frame: 1:表示是关键帧, 0:表示不是
- * timestamp: 解码时间戳
- * presentation_timestamp: 显示时间戳
- * 注意:请确保 presentation_timestamp >= timestamp, 否则结果未定义
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_PostVideoEncodedDataV2(IntPtr handle, UInt32 codec_id,
- IntPtr data, UInt32 size,
- Int32 is_key_frame, UInt64 timestamp, UInt64 presentation_timestamp);
- /*
- * 投递编码过的音频数据给SDK
- *codec_id:请参考NT_MEDIA_CODEC_ID, 注意不要传递video codec id,否则结果没有定义
- * data: 编码数据
- * size: 编码数据大小
- * is_key_frame: 1:表示是关键帧, 0:表示不是
- * timestamp: 时间戳
- * parameter_info: 当编码是aac的时候,这个是AudioSpecificConfig, 其他编码请传NULL
- * parameter_info_size: parameter_info 长度
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_PostAudioEncodedData(IntPtr handle, UInt32 codec_id,
- IntPtr data, UInt32 size,
- Int32 is_key_frame, UInt64 timestamp,
- IntPtr parameter_info,
- UInt32 parameter_info_size);
- /*
- * 投递PCM音频数据给SDK, 每10ms音频数据传入一次
- *
- * data: pcm数据, 注意每个采样必须是16位的,其他格式不支持, 注意双通道的话数据是交错的
- * size: pcm数据大小
- * timestamp:时间戳单位是毫秒,必须是递增的
- * sample_rate: 采样率
- * channels: 通道, 当前通道只支持1和2,也就是单通道和双通道
- * per_channel_sample_number: 这个请传入的是 sampleRate/100, 也就是单个通道的10毫秒的采样数
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_PostAudioPCMData(IntPtr handle,
- IntPtr data, UInt32 size, UInt64 timestamp,
- Int32 sample_rate, Int32 channels, Int32 per_channel_sample_number);
- /*
- * 投递用来混音的PCM音频数据给SDK, 每10ms音频数据传入一次
- * 这个接口只有在auido_option是NT_PB_E_AUDIO_OPTION_MIC_EXTERNAL_PCM_MIXER使用,其他情况下报错
- * 当前只支持一路外部音频和内置麦克风混音
- *
- * data: pcm数据, 注意每个采样必须是16位的,其他格式不支持, 注意双通道的话数据是交错的
- * size: pcm数据大小
- * timestamp:时间戳单位是毫秒,必须是递增的
- * sample_rate: 采样率
- * channels: 通道, 当前通道只支持1和2,也就是单通道和双通道
- * per_channel_sample_number: 这个请传入的是 sampleRate/100, 也就是单个通道的10毫秒的采样数
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_PostAudioExternalPCMMixerData(IntPtr handle,
- IntPtr data, UInt32 size, UInt64 timestamp,
- Int32 sample_rate, Int32 channels, Int32 per_channel_sample_number);
- /*++++发送用户自定义数据相关接口++++*/
- /*
- * 1. 目前使用sei机制发送用户自定数据到播放端
- * 2. 这种机制有可能会丢失数据, 所以这种方式不保证接收端一定能收到
- * 3. 优势:能和视频保持同步,虽然有可能丢失,但一般的需求都满足了
- * 4. 目前提供两种发送方式 第一种发送二进制数据, 第二种发送 utf8字符串
- */
- /*
- * 设置发送队列大小,为保证实时性,默认大小为3, 必须设置一个大于0的数
- * 如果数据超过队列大小,将丢掉队头数据
- * 这个接口请在 StartPublisher 之前调用
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetPostUserDataQueueMaxSize(IntPtr handle, Int32 max_size, Int32 reserve);
- /*
- * 清空用户数据队列, 有些情况可能会用到,比如发送队列里面有4条消息再等待发送,又想把最新的消息快速发出去, 可以
- * 先清除掉正在排队消息, 再调用PostUserXXX
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_ClearPostUserDataQueue(IntPtr handle);
- /*
- * 发送二进制数据
- * data: 二进制数据
- * size:数据大小
- * 注意: 1.目前数据大小限制在256个字节以内,太大可能会影响视频传输,如果有特殊需求,需要增大限制,请联系我们
- * 2. 如果积累的数据超过了设置的队列大小,之前的队头数据将被丢弃
- * 3. 必须再调用StartPublisher之后再发送数据
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_PostUserData(IntPtr handle, IntPtr data, UInt32 size, Int32 reserve);
- /*
- * 发送utf8字符串
- * utf8_str: utf8字符串
- * 注意: 1. 字符串长度不能超过256, 太大可能会影响视频传输,如果有特殊需求,需要增大限制,请联系我们
- * 2. 如果积累的数据超过了设置的队列大小,之前的队头数据将被丢弃
- * 3. 必须再调用StartPublisher之后再发送数据
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_PostUserUTF8StringData(IntPtr handle, byte[] utf8_str, Int32 reserve);
- /*
- 设置休眠模式
- mode: 1表示休眠, 0表示不休眠
- reserve: 保留参数, 当前传0
- 成功返回NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetSleepMode(IntPtr handle, Int32 mode, Int32 reserve);
- /*----发送用户自定义数据相关接口----*/
- /*
- * 万能接口, 设置参数, 大多数问题, 这些接口都能解决
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetParam(IntPtr handle, UInt32 id, IntPtr pData);
- /*
- * 万能接口, 得到参数, 大多数问题,这些接口都能解决
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_GetParam(IntPtr handle, UInt32 id, IntPtr pData);
- /*+++屏幕选取工具+++*/
- /*
- * 注意这个接口返回的句柄,一定要和上面的推送时用的Open接口返回的句柄区分开
- * 完全是不同的句柄,用错结果未定义
- */
- /*
- * 打开一个屏幕选取工具的toolHandle
- *
- * mode: 请参考NT_PB_E_SCREEN_REGION_CHOOSE_MODE
- * mode_data: mode == NT_PB_E_SCREEN_REGION_CHOOSE_MODE_CHOOSE, mode_data 是NULL.
- * mode == NT_PB_E_SCREEN_REGION_CHOOSE_MODE_MOVE, mode_data 是NT_PB_RectRegion*
- * callback: 这个必须要有,并且必须处理, 否则资源泄漏
- * callback_data: callback data
- * flag目前传0,后面扩展用
- * pReserve传NULL,扩展用
- *
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_OpenScreenRegionChooseTool(ref IntPtr pToolHandle,
- UInt32 mode,
- IntPtr mode_data,
- NT_PB_SDKScreenRegionChooseCallBack callback,
- IntPtr callback_data,
- UInt32 flag, IntPtr pReserve);
- /*
- * 调用这个接口之后toolHandle失效
- *
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_CloseScreenRegionChooseTool(IntPtr toolHandle);
- /*+++rtsp server操作接口+++*/
- /*
- * 创建一个rtsp server
- * pRtspServerHandle: rtsp server 句柄
- * reserve:保留参数传0
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_OpenRtspServer(ref IntPtr pRtspServerHandle, Int32 reserve);
- /*
- * 设置rtsp server 监听端口, 在StartRtspServer之前必须要设置端口
- * rtsp_server_handle: rtsp server 句柄
- * port: 端口号,可以设置为554,或者是1024到65535之间,其他值返回失败
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetRtspServerPort(IntPtr rtsp_server_handle, Int32 port);
- /*
- * 设置rtsp server 鉴权用户名和密码, 这个可以不设置,只有需要鉴权的再设置
- * rtsp_server_handle: rtsp server 句柄
- * user_name: 用户名,必须是英文
- * password:密码,必须是英文
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetRtspServerUserNamePassword(IntPtr rtsp_server_handle, [MarshalAs(UnmanagedType.LPStr)] String user_name, [MarshalAs(UnmanagedType.LPStr)] String password);
- /*
- * 设置rtsp server 组播, 如果server设置成组播就不能单播,组播和单播只能选一个, 一般来说单播网络设备支持的好,wifi组播很多路由器不支持
- * rtsp_server_handle: rtsp server 句柄
- * is_multicast: 是否组播, 1为组播, 0为单播, 其他值接口返回错误, 默认是单播
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetRtspServerMulticast(IntPtr rtsp_server_handle, Int32 is_multicast);
- /*
- * 设置rtsp server 组播组播地址
- * rtsp_server_handle: rtsp server 句柄
- * multicast_address: 组播地址
- * 如果设置的不是组播地址, 将返回错误
- * 组播地址范围说明: [224.0.0.0, 224.0.0.255] 为组播预留地址, 不能设置. 可设置范围为[224.0.1.0, 239.255.255.255], 其中SSM地址范围为[232.0.0.0, 232.255.255.255]
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetRtspServerMulticastAddress(IntPtr rtsp_server_handle, [MarshalAs(UnmanagedType.LPStr)] String multicast_address);
- /*
- * 获取rtsp server当前的客户会话数, 这个接口必须在StartRtspServer之后再调用
- * rtsp_server_handle: rtsp server 句柄
- * session_numbers: 会话数
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_GetRtspServerClientSessionNumbers(IntPtr rtsp_server_handle, ref Int32 session_numbers);
- /*
- * 启动rtsp server
- * rtsp_server_handle: rtsp server 句柄
- * reserve: 保留参数传0
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_StartRtspServer(IntPtr rtsp_server_handle, Int32 reserve);
- /*
- * 停止rtsp server
- * rtsp_server_handle: rtsp server 句柄
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_StopRtspServer(IntPtr rtsp_server_handle);
- /*
- * 关闭rtsp server
- * 调用这个接口之后rtsp_server_handle失效,
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_CloseRtspServer(IntPtr rtsp_server_handle);
- /*---rtsp server操作接口---*/
- /*
- * 分配Image, 分配后,SDK内部会初始化这个结构体, 失败的话返回NULL
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern IntPtr NT_PB_AllocateImage();
- /*
- * 释放Image, 注意一定要调用这个接口释放内存,如果在你自己的模块中释放,Windows会出问题的
- *
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll", EntryPoint = "NT_PB_FreeImage", CallingConvention = CallingConvention.StdCall)]
- public static extern UInt32 NT_PB_FreeImage(ref NT_PB_Image[] ppImage);
- /*
- * 克隆一个Image, 失败返回NULL
- */
- [DllImport(@"x64\SmartPublisherSDK.dll", EntryPoint = "NT_PB_CloneImage", CallingConvention = CallingConvention.StdCall)]
- public static extern IntPtr NT_PB_CloneImage(ref NT_PB_Image src);
- /*
- * 拷贝Image, 会先释放dst的资源,然后再拷贝
- *
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll", EntryPoint = "NT_PB_CopyImage", CallingConvention = CallingConvention.StdCall)]
- public static extern UInt32 NT_PB_CopyImage(ref NT_PB_Image dst, NT_PB_Image src);
- /*
- * 给图像一个面设置数据,如果这个面已经有数据,将会释放掉再设置
- *
- * 这个设置行为依赖于NT_PB_Image::format_
- *
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll", EntryPoint = "NT_PB_SetImagePlane", CallingConvention = CallingConvention.StdCall)]
- public static extern UInt32 NT_PB_SetImagePlane(ref NT_PB_Image image, Int32 plane,
- Int32 planeStride, SByte planeData, Int32 planeDataSize);
- /*
- * 加载PNG图片
- *
- * file_name_utf8: 必须是utf8编码
- *
- * 成功返回 NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll", EntryPoint = "NT_PB_LoadImage", CallingConvention = CallingConvention.StdCall)]
- public static extern UInt32 NT_PB_LoadImage(
- [MarshalAs(UnmanagedType.LPStr)] String file_name_utf8,
- ref NT_PB_Image ppImage
- );
- /*
- * 绘制相关接口, 绘制后续可能会提供更多接口
- */
- /*
- * 成功返回NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll", EntryPoint = "NT_PB_Draw", CallingConvention = CallingConvention.StdCall)]
- public static extern UInt32 NT_PB_Draw(int hdc, Int32 xDst, Int32 yDst,
- Int32 dstWidth, Int32 dstHeight,
- Int32 xSrc, Int32 ySrc,
- Int32 srcWidth, Int32 srcHeight,
- ref NT_PB_Image image);
- /*
- * 设置授权Key
- *
- * reserve1: 请传0
- * reserve2: 请传NULL
- * 成功返回: NT_ERC_OK
- */
- [DllImport(@"x64\SmartPublisherSDK.dll")]
- public static extern UInt32 NT_PB_SetSDKClientKey([MarshalAs(UnmanagedType.LPStr)] String cid, [MarshalAs(UnmanagedType.LPStr)] String key, Int32 reserve1, IntPtr reserve2);
- }
- }
|