smart_publisher_sdk_x64.cs 61 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547
  1. /*
  2. * nt_smart_publisher_sdk.cs
  3. * nt_smart_publisher_sdk
  4. *
  5. * Github: https://github.com/daniulive/SmarterStreaming
  6. *
  7. * Created by DaniuLive on 2016/08/10.
  8. * Copyright © 2014~2017 DaniuLive. All rights reserved.
  9. */
  10. using System;
  11. using System.Runtime.InteropServices;
  12. using System.Text;
  13. namespace Vinno.vCloud.FIS.CrossPlatform.Windows.RTMPSDK
  14. {
  15. public class NTSmartPublisherSDK_x64
  16. {
  17. //2017-05-27++
  18. /*
  19. * 初始化接口
  20. *
  21. * flag:目前传0,后面扩展用
  22. * pReserve:传NULL,扩展用
  23. *
  24. * 成功返回 NT_ERC_OK
  25. */
  26. [DllImport(@"x64\SmartPublisherSDK.dll")]
  27. public static extern UInt32 NT_PB_Init(UInt32 flag, IntPtr pReserve);
  28. /*
  29. * UnInit
  30. *
  31. * 这个是最后一个调用的接口
  32. *
  33. * 成功返回 NT_ERC_OK
  34. */
  35. [DllImport(@"x64\SmartPublisherSDK.dll")]
  36. public static extern UInt32 NT_PB_UnInit();
  37. /*
  38. * Open
  39. *
  40. * video_option:请参考 NT_PB_E_VIDEO_OPTION
  41. * auido_option 请参考 NT_PB_E_AUDIO_OPTION
  42. * flag目前传0,后面扩展用
  43. * pReserve传NULL,扩展用
  44. *
  45. * 获取Handle
  46. *
  47. * 成功返回 NT_ERC_OK
  48. */
  49. [DllImport(@"x64\SmartPublisherSDK.dll")]
  50. public static extern UInt32 NT_PB_Open(out IntPtr pHandle, UInt32 video_option, UInt32 auido_option, UInt32 flag, IntPtr pReserve);
  51. /*
  52. * Close
  53. *
  54. * 调用这个接口之后handle失效
  55. *
  56. * 成功返回 NT_ERC_OK
  57. */
  58. [DllImport(@"x64\SmartPublisherSDK.dll")]
  59. public static extern UInt32 NT_PB_Close(IntPtr handle);
  60. /*
  61. * 设置推送的URL
  62. *
  63. * 支持同时推送到多个RTMP服务器上,最多可以同时支持推到三个服务器上
  64. * 为设置多个URL,请调用多次
  65. *
  66. * 成功返回 NT_ERC_OK
  67. */
  68. [DllImport(@"x64\SmartPublisherSDK.dll")]
  69. public static extern UInt32 NT_PB_SetURL(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] String url, IntPtr pReserve);
  70. /*
  71. * 设置rtmp推送加密选项
  72. * url: 考虑到可能推送到多个服务器,可以根据推送url配置不同的加密选项, 请确保url和SetURL一致
  73. * is_encrypt_video: 1:表示视频加密, 0:表示视频不加密, 默认不加密, 其他值返回错误
  74. * is_encrypt_audio: 1:表示音频加密, 0:表示音频不加密, 默认不加密, 其他值返回错误
  75. *
  76. * 成功返回 NT_ERC_OK
  77. */
  78. [DllImport(@"x64\SmartPublisherSDK.dll")]
  79. public static extern UInt32 NT_PB_SetRtmpEncryptionOption(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] String url, Int32 is_encrypt_video, Int32 is_encrypt_audio);
  80. /*
  81. * 设置rtmp加密算法
  82. * url: 考虑到可能推送到多个服务器,可以根据推送url配置不同的加密选项, 请确保url和SetURL一致
  83. * encryption_algorithm: 加密算法, 当前支持aes和国标sm4. 1为aes, 2为sm4, 默认为aes.
  84. */
  85. [DllImport(@"x64\SmartPublisherSDK.dll")]
  86. public static extern UInt32 NT_PB_SetRtmpEncryptionAlgorithm(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] String url, Int32 encryption_algorithm);
  87. /*
  88. * 设置rtmp推送加密密钥
  89. * url: 考虑到可能推送到多个服务器,可以根据推送url配置不同的加密选项, 请确保url和SetURL一致
  90. * key:加密密钥
  91. * key_size: 如果加密算法是aes, key_size必须是16, 24, 32 这三个值, 其他返回错误; 如果加密算法是sm4, key_size必须是16, 其他值返回错误.
  92. * 成功返回 NT_ERC_OK
  93. */
  94. [DllImport(@"x64\SmartPublisherSDK.dll")]
  95. public static extern UInt32 NT_PB_SetRtmpEncryptionKey(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] String url, byte[] key, UInt32 key_size);
  96. /*
  97. * 设置rtmp推送加密IV(初始化向量), 这个接口不调用的话, 将使用默认IV
  98. * url: 考虑到可能推送到多个服务器,可以根据推送url配置不同的加密选项, 请确保url和SetURL一致
  99. * iv: 初始化向量
  100. * iv_size: 当前必须是16, 其他值返回错误
  101. * 成功返回 NT_ERC_OK
  102. */
  103. [DllImport(@"x64\SmartPublisherSDK.dll")]
  104. public static extern UInt32 NT_PB_SetRtmpEncryptionIV(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] String url, byte[] iv, UInt32 iv_size);
  105. /*
  106. * 设置视频包时间戳回调
  107. * url:推送url
  108. * min_call_interval:最小回调时间间隔(单位是毫秒), 如果是0的话,发送每个视频包时都会回调
  109. * callbackdata:回调时用户自定义数据
  110. * call_back:回调函数指针
  111. */
  112. [DllImport(@"x64\SmartPublisherSDK.dll")]
  113. public static extern UInt32 NT_PB_SetVideoPacketTimestampCallBack(IntPtr handle,
  114. [MarshalAs(UnmanagedType.LPStr)] String url, UInt32 min_call_interval,
  115. IntPtr call_back_data, NT_PB_SDKVideoPacketTimestampCallBack call_back);
  116. /*
  117. * 设置推送状态回调
  118. * call_back_data: 回调时用户自定义数据
  119. * call_back
  120. */
  121. [DllImport(@"x64\SmartPublisherSDK.dll")]
  122. public static extern UInt32 NT_PB_SetPublisherStatusCallBack(IntPtr handle, IntPtr call_back_data,
  123. NT_PB_SDKPublisherStatusCallBack call_back);
  124. /*
  125. * 启动推送
  126. *
  127. * 成功返回 NT_ERC_OK
  128. */
  129. [DllImport(@"x64\SmartPublisherSDK.dll")]
  130. public static extern UInt32 NT_PB_StartPublisher(IntPtr handle, IntPtr pReserve);
  131. /*
  132. * 停止推送
  133. *
  134. * 成功返回 NT_ERC_OK
  135. */
  136. [DllImport(@"x64\SmartPublisherSDK.dll")]
  137. public static extern UInt32 NT_PB_StopPublisher(IntPtr handle);
  138. /*+++发布rtsp流相关接口+++*/
  139. /*
  140. * 设置rtsp的流名称
  141. * stream_name: 流程名称,不能为空字符串,必须是英文
  142. * 这个作用是: 比如rtsp的url是:rtsp://192.168.0.111/test, test就是设置下去的stream_name
  143. * 成功返回 NT_ERC_OK
  144. */
  145. [DllImport(@"x64\SmartPublisherSDK.dll")]
  146. public static extern UInt32 NT_PB_SetRtspStreamName(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] String stream_name);
  147. /*
  148. * 给要发布的rtsp流设置rtsp server, 一个流可以发布到多个rtsp server上,rtsp server的创建启动请参考OpenRtspServer和StartRtspServer接口
  149. * handle: 推送实例句柄
  150. * rtsp_server_handle:rtsp server句柄
  151. * reserve: 保留参数,传0
  152. */
  153. [DllImport(@"x64\SmartPublisherSDK.dll")]
  154. public static extern UInt32 NT_PB_AddRtspStreamServer(IntPtr handle, IntPtr rtsp_server_handle, Int32 reserve);
  155. /*
  156. * * 清除设置的rtsp server
  157. */
  158. [DllImport(@"x64\SmartPublisherSDK.dll")]
  159. public static extern UInt32 NT_PB_ClearRtspStreamServer(IntPtr handle);
  160. /*
  161. * 启动rtsp流
  162. * reserve: 保留参数,传0
  163. */
  164. [DllImport(@"x64\SmartPublisherSDK.dll")]
  165. public static extern UInt32 NT_PB_StartRtspStream(IntPtr handle, Int32 reserve);
  166. /*
  167. * 停止rtsp流
  168. */
  169. [DllImport(@"x64\SmartPublisherSDK.dll")]
  170. public static extern UInt32 NT_PB_StopRtspStream(IntPtr handle);
  171. /*+++推送rtsp相关接口+++*/
  172. /*
  173. * 设置推送rtsp传输方式
  174. * transport_protocol: 1表示UDP传输rtp包; 2表示TCP传输rtp包. 默认是1, UDP传输. 传其他值SDK报错。
  175. * 成功返回 NT_ERC_OK
  176. */
  177. [DllImport(@"x64\SmartPublisherSDK.dll")]
  178. public static extern UInt32 NT_PB_SetPushRtspTransportProtocol(IntPtr handle, Int32 transport_protocol);
  179. /*
  180. * 设置推送RTSP的URL
  181. * 成功返回 NT_ERC_OK
  182. */
  183. [DllImport(@"x64\SmartPublisherSDK.dll")]
  184. public static extern UInt32 NT_PB_SetPushRtspURL(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] String url);
  185. /*
  186. * 启动推送RTSP流
  187. * reserve: 保留参数,传0
  188. */
  189. [DllImport(@"x64\SmartPublisherSDK.dll")]
  190. public static extern UInt32 NT_PB_StartPushRtsp(IntPtr handle, Int32 reserve);
  191. /*
  192. * 停止推送RTSP流
  193. */
  194. [DllImport(@"x64\SmartPublisherSDK.dll")]
  195. public static extern UInt32 NT_PB_StopPushRtsp(IntPtr handle);
  196. /*---推送rtsp相关接口---*/
  197. /*---发布rtsp流相关接口---*/
  198. /*
  199. * 设置事件回调,如果想监听事件的话,建议调用Open成功后,就调用这个接口
  200. */
  201. [DllImport(@"x64\SmartPublisherSDK.dll")]
  202. public static extern UInt32 NT_PB_SetEventCallBack(IntPtr handle, IntPtr call_back_data, NT_PB_SDKEventCallBack call_back);
  203. /*参数相关设置*/
  204. /*
  205. * 设置屏幕裁剪
  206. *
  207. * left: 屏幕左上角x位置
  208. * top: 屏幕左上角y位置
  209. * width: 宽度, 必须是16的倍数
  210. * height: 高度, 必须是16的倍数
  211. */
  212. [DllImport(@"x64\SmartPublisherSDK.dll")]
  213. public static extern UInt32 NT_PB_SetScreenClip(IntPtr handle, UInt32 left, UInt32 top, UInt32 width, UInt32 height);
  214. /*
  215. * 移动屏幕剪切区域,这个接口只能推送或者录像中调用
  216. *
  217. * left: 屏幕左上角x位置
  218. * top: 屏幕左上角y位置
  219. */
  220. [DllImport(@"x64\SmartPublisherSDK.dll")]
  221. public static extern UInt32 NT_PB_MoveScreenClipRegion(IntPtr handle, UInt32 left, UInt32 top);
  222. /*
  223. * 允许使用DXGI屏幕采集方式, 这种方式需要win8及以上系统才支持
  224. * is_enable: 1表示启用DXGI采集,0表示不启用, 其他值直接返回错误
  225. * 成功返回 NT_ERC_OK
  226. */
  227. [DllImport(@"x64\SmartPublisherSDK.dll")]
  228. public static extern UInt32 NT_PB_EnableDXGIScreenCapturer(IntPtr handle, Int32 is_enable);
  229. /*
  230. * 采集屏幕时停用Aero, 这个只对win7有影响,win8及以上系统, 微软已经抛弃了Aero Glass效果
  231. * is_disable: 1:表示停用,如果设置为1的话,在win7系统上开始捕屏时可能黑屏闪烁一下, 0:表示不停用
  232. * sdk内部默认值是1
  233. * 成功返回 NT_ERC_OK
  234. */
  235. [DllImport(@"x64\SmartPublisherSDK.dll")]
  236. public static extern UInt32 NT_PB_DisableAeroScreenCapturer(IntPtr handle, Int32 is_disable);
  237. /*
  238. * 在使用GDI方式采集屏幕时, 如果需要采集WS_EX_LAYERED属性窗口,设置成1
  239. * is_enable: 1表示采集WS_EX_LAYERED属性窗口, 0表示不采集WS_EX_LAYERED属性窗口. 默认系统是0,不采集.
  240. * 注意采集WS_EX_LAYERED属性窗口,鼠标会闪烁
  241. * 成功返回 NT_ERC_OK
  242. */
  243. [DllImport(@"x64\SmartPublisherSDK.dll")]
  244. public static extern UInt32 NT_PB_EnableScreenCaptureLayeredWindow(IntPtr handle, Int32 is_enable);
  245. /*
  246. * 检查是否支持WR方式采集窗口
  247. * is_supported: 输出参数, 输出1表示支持, 0表示不支持
  248. * 注意:这个需要win10较高版本才支持
  249. * 成功返回 NT_ERC_OK
  250. */
  251. [DllImport(@"x64\SmartPublisherSDK.dll")]
  252. public static extern UInt32 NT_PB_IsWRCaptureWindowSupported(ref Int32 is_supported);
  253. /*
  254. * 设置捕获窗口方式
  255. * way: 1使用GDI DC方式捕获, 2使用WR方式捕获, 默认是GDI DC方式
  256. * 成功返回 NT_ERC_OK
  257. */
  258. [DllImport(@"x64\SmartPublisherSDK.dll")]
  259. public static extern UInt32 NT_PB_SetCaptureWindowWay(IntPtr handle, Int32 way);
  260. /*
  261. * 这个接口主要判断顶层窗口能否能被捕获, 如果不能被捕获的话返回NT_ERC_FAILED
  262. * 如果返回NT_ERC_OK,表示可能能捕获
  263. */
  264. [DllImport(@"x64\SmartPublisherSDK.dll")]
  265. public static extern UInt32 NT_PB_CheckCapturerWindow(IntPtr hwnd);
  266. /*
  267. * 这个接口主要判断顶层窗口能否能被捕获, V2版本
  268. * capture_way: 这个请参考SetCaptureWindowWay说明
  269. * 如果不能被捕获的话返回NT_ERC_FAILED, 如果返回NT_ERC_OK,表示可能能捕获
  270. */
  271. [DllImport(@"x64\SmartPublisherSDK.dll")]
  272. public static extern UInt32 NT_PB_CheckCapturerWindowV2(IntPtr hwnd, Int32 capture_way);
  273. /*
  274. * 设置要捕获的窗口的句柄
  275. */
  276. [DllImport(@"x64\SmartPublisherSDK.dll")]
  277. public static extern UInt32 NT_PB_SetCaptureWindow(IntPtr handle, IntPtr hwnd);
  278. /*
  279. * 设置帧率
  280. */
  281. [DllImport(@"x64\SmartPublisherSDK.dll")]
  282. public static extern UInt32 NT_PB_SetFrameRate(IntPtr handle, UInt32 frame_rate);
  283. /*
  284. * 获取摄像头数量
  285. *
  286. * pNumer: 返回设备数量
  287. *
  288. * 成功返回 NT_ERC_OK
  289. */
  290. [DllImport(@"x64\SmartPublisherSDK.dll")]
  291. public static extern UInt32 NT_PB_GetVideoCaptureDeviceNumber(ref Int32 pNumer);
  292. /*
  293. * 返回摄像头设备信息
  294. *
  295. * device_index: 设备索引
  296. * device_name_utf8: 设备名称,传NULL将不返回名称,如果不是NULL的话, device_name_length必须大于等于256, 返回utf8编码的设备名称
  297. * device_name_length: 设备名称缓冲大小,如果device_name_utf8是NULL,则传入0, 否则必须大于等于256
  298. * device_unique_id_utf8: 设备唯一ID, 传NULL将不返回ID,如果不传NULL的话,device_unique_id_length必须大于等于1024,返回utf8编码的设备ID
  299. * device_unique_id_length: 设备唯一ID缓冲代销, 如果是device_unique_id_utf8NULL, 则传入0,否则必须大于等于1024
  300. *
  301. * 成功返回 NT_ERC_OK
  302. */
  303. [DllImport(@"x64\SmartPublisherSDK.dll")]
  304. public static extern UInt32 NT_PB_GetVideoCaptureDeviceInfo(
  305. Int32 device_index,
  306. [MarshalAs(UnmanagedType.LPStr)] StringBuilder device_name_utf8,
  307. UInt32 device_name_length,
  308. [MarshalAs(UnmanagedType.LPStr)] StringBuilder device_unique_id_utf8,
  309. UInt32 device_unique_id_length
  310. );
  311. /*
  312. * 返回摄像头能力数
  313. *
  314. * device_unique_id_utf8: 设备唯一id
  315. * capability_number: 返回的设备能力数
  316. *
  317. * 成功返回 NT_ERC_OK
  318. */
  319. [DllImport(@"x64\SmartPublisherSDK.dll")]
  320. public static extern UInt32 NT_PB_GetVideoCaptureDeviceCapabilityNumber(
  321. [MarshalAs(UnmanagedType.LPStr)] String device_unique_id_utf8,
  322. ref Int32 capability_number
  323. );
  324. /*
  325. * 返回摄像头能力
  326. *
  327. * device_unique_id_utf8: 设备唯一id
  328. * device_capability_index: 设备能力索引
  329. * capability: 设备能力
  330. *
  331. * 成功返回 NT_ERC_OK
  332. */
  333. [DllImport(@"x64\SmartPublisherSDK.dll", EntryPoint = "NT_PB_GetVideoCaptureDeviceCapability", CallingConvention = CallingConvention.StdCall)]
  334. public static extern UInt32 NT_PB_GetVideoCaptureDeviceCapability(
  335. [MarshalAs(UnmanagedType.LPStr)] String device_unique_id_utf8,
  336. Int32 device_capability_index,
  337. ref NT_PB_VideoCaptureCapability capability);
  338. /*
  339. * 在多个实例推送多路时,对于一个摄像头来说,所有实例只能共享摄像头,那么只有一个实例可以改变摄像头分辨率,
  340. * 其他实例使用这个缩放后的图像.
  341. * 在使用多实例时,调用这个接口禁止掉实例的分辨率设置能力.只留一个实例能改变分辨,如果不设置,行为
  342. * 未定义.
  343. * 这个接口必须在 SetLayersConfig, AddLayerConfig 之前调用
  344. * device_unique_id_utf8: 设备唯一id
  345. * 成功返回 NT_ERC_OK
  346. */
  347. [DllImport(@"x64\SmartPublisherSDK.dll", EntryPoint = "NT_PB_DisableVideoCaptureResolutionSetting", CallingConvention = CallingConvention.StdCall)]
  348. public static extern UInt32 NT_PB_DisableVideoCaptureResolutionSetting(
  349. IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] String device_unique_id_utf8);
  350. /*
  351. * 启动摄像头预览
  352. *
  353. * device_unique_id_utf8: 设备唯一id
  354. * hwnd: 绘制的窗口句柄
  355. *
  356. * 成功返回 NT_ERC_OK
  357. */
  358. [DllImport(@"x64\SmartPublisherSDK.dll")]
  359. public static extern UInt32 NT_PB_StartVideoCaptureDevicePreview(
  360. [MarshalAs(UnmanagedType.LPStr)] String device_unique_id_utf8,
  361. IntPtr hwnd
  362. );
  363. /*
  364. * 上下反转摄像头预览图像
  365. * is_flip: 1:表示反转, 0:表示不反转
  366. */
  367. [DllImport(@"x64\SmartPublisherSDK.dll")]
  368. public static extern UInt32 NT_PB_FlipVerticalCameraPreview(IntPtr hwnd, Int32 is_flip);
  369. /*
  370. * 水平反转摄像头预览图像
  371. * is_flip: 1:表示反转, 0:表示不反转
  372. */
  373. [DllImport(@"x64\SmartPublisherSDK.dll")]
  374. public static extern UInt32 NT_PB_FlipHorizontalCameraPreview(IntPtr hwnd, Int32 is_flip);
  375. /*
  376. * 旋转摄像头预览图像, 顺时针旋转
  377. * degress: 设置0, 90, 180, 270度有效,其他值无效
  378. * 注意:除了0度,其他角度播放会耗费更多CPU
  379. */
  380. [DllImport(@"x64\SmartPublisherSDK.dll")]
  381. public static extern UInt32 NT_PB_RotateCameraPreview(IntPtr hwnd, Int32 degress);
  382. /*
  383. * 告诉SDK预览窗口大小改变
  384. *
  385. * hwnd: 绘制的窗口句柄
  386. *
  387. * 成功返回 NT_ERC_OK
  388. */
  389. [DllImport(@"x64\SmartPublisherSDK.dll")]
  390. public static extern UInt32 NT_PB_VideoCaptureDevicePreviewWindowSizeChanged(IntPtr hwnd);
  391. /*
  392. * 停止摄像头预览
  393. *
  394. * hwnd: 绘制的窗口句柄
  395. *
  396. * 成功返回 NT_ERC_OK
  397. */
  398. [DllImport(@"x64\SmartPublisherSDK.dll")]
  399. public static extern UInt32 NT_PB_StopVideoCaptureDevicePreview(IntPtr hwnd);
  400. /***************************/
  401. /*****获取摄像头RBG32图像接口++/
  402. /***************************/
  403. /*
  404. 调用流程:
  405. 1. NT_PB_StartGetVideoCaptureDeviceImage 获取句柄,且保存句柄
  406. 2. NT_PB_GetVideoCaptureDeviceImage 获取图像
  407. 3. NT_PB_StopGetVideoCaptureDeviceImage 停止,之后句柄将无效
  408. */
  409. /*
  410. * 调用此接口前置条件: 必须调用过Init接口, 否则会奔溃或失败
  411. *
  412. * pVideoCaptrueImageHandle: 要返回的句柄的指针,请不要和其他句柄搞混
  413. * device_unique_id_utf8: 设备唯一id
  414. *
  415. * 成功返回 NT_ERC_OK 并返回VideoCaptrueImageHandle句柄
  416. */
  417. [DllImport(@"x64\SmartPublisherSDK.dll")]
  418. public static extern UInt32 NT_PB_StartGetVideoCaptureDeviceImage(
  419. IntPtr pVideoCaptrueImageHandle,
  420. [MarshalAs(UnmanagedType.LPStr)] String device_unique_id_utf8
  421. );
  422. /*
  423. * 上下反转设备图像
  424. * is_flip: 1:表示反转, 0:表示不反转
  425. */
  426. [DllImport(@"x64\SmartPublisherSDK.dll")]
  427. public static extern UInt32 NT_PB_FlipVerticalVideoCaptureDeviceImage(IntPtr videoCaptrueImageHandle, Int32 is_flip);
  428. /*
  429. * 水平反转设备图像
  430. * is_flip: 1:表示反转, 0:表示不反转
  431. */
  432. [DllImport(@"x64\SmartPublisherSDK.dll")]
  433. public static extern UInt32 NT_PB_FlipHorizontalVideoCaptureDeviceImage(IntPtr videoCaptrueImageHandle, Int32 is_flip);
  434. /*
  435. * 旋转设备图像, 顺时针旋转
  436. * degress: 设置0, 90, 180, 270度有效,其他值无效
  437. * 注意:除了0度,其他角度播放会耗费更多CPU
  438. */
  439. [DllImport(@"x64\SmartPublisherSDK.dll")]
  440. public static extern UInt32 NT_PB_RotateVideoCaptureDeviceImage(IntPtr videoCaptrueImageHandle, Int32 degress);
  441. /*
  442. * 调用这个接口可以获取摄像头图像
  443. *
  444. * videoCaptrueImageHandle:句柄, 通过NT_PB_StartGetVideoCaptureDeviceImage得到
  445. *
  446. * isDiscardImage: 1:表示取到图像后,就把SDK内部保存的图像删除掉
  447. * 0:表示取到图像后, SDK内部的图像不删除,那么下一次再调用这个接口的时候,如果摄像头没有产生新的图像,就会返回上次返回过的图像
  448. *
  449. * ppImage: 指向图像指针的指针,如果有图像的话, 会填充 *ppImage
  450. *
  451. * 返回值:
  452. * NT_ERC_OK: 表示取到图像, *ppImage必然有值
  453. * NT_ERC_PB_NO_IMAGE: 表示SDK内部目前没有图像,需要等待摄像头产生图像
  454. * 其他值: 可能是其他错误,比如参数错误等等
  455. *
  456. * 注意:
  457. * 1. 这个接口返回的图像 宽和高可能会变,就是说每一次调用返回的图像宽高可能不一样
  458. * 2. 取到的图像是从上到下的
  459. */
  460. [DllImport(@"x64\SmartPublisherSDK.dll", EntryPoint = "NT_PB_GetVideoCaptureDeviceImage", CallingConvention = CallingConvention.StdCall)]
  461. public static extern UInt32 NT_PB_GetVideoCaptureDeviceImage(
  462. IntPtr videoCaptrueImageHandle,
  463. Int32 isDiscardImage,
  464. ref NT_PB_Image ppImage
  465. );
  466. /*
  467. * 停止获取摄像头图像
  468. *
  469. * 成功返回 NT_ERC_OK
  470. *
  471. * 注意:必须在调用NT_PB_UnInit之前调用
  472. */
  473. [DllImport(@"x64\SmartPublisherSDK.dll")]
  474. public static extern UInt32 NT_PB_StopGetVideoCaptureDeviceImage(
  475. IntPtr videoCaptrueImageHandle
  476. );
  477. /***************************/
  478. /*****获取摄像头RBA32图像接口--/
  479. /***************************/
  480. /*
  481. * 设置摄像头信息
  482. */
  483. [DllImport(@"x64\SmartPublisherSDK.dll")]
  484. public static extern UInt32 NT_PB_SetVideoCaptureDeviceBaseParameter(
  485. IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] String device_unique_id_utf8, UInt32 width, UInt32 height);
  486. /*
  487. * 上下反转摄像头图像
  488. * is_flip: 1:表示反转, 0:表示不反转
  489. */
  490. [DllImport(@"x64\SmartPublisherSDK.dll")]
  491. public static extern UInt32 NT_PB_FlipVerticalCamera(IntPtr handle, Int32 is_flip);
  492. /*
  493. * 水平反转摄像头图像
  494. * is_flip: 1:表示反转, 0:表示不反转
  495. */
  496. [DllImport(@"x64\SmartPublisherSDK.dll")]
  497. public static extern UInt32 NT_PB_FlipHorizontalCamera(IntPtr handle, Int32 is_flip);
  498. /*
  499. * 旋转摄像头图像, 顺时针旋转
  500. * degress: 设置0, 90, 180, 270度有效,其他值无效
  501. * 注意:除了0度,其他角度播放会耗费更多CPU
  502. */
  503. [DllImport(@"x64\SmartPublisherSDK.dll")]
  504. public static extern UInt32 NT_PB_RotateCamera(IntPtr handle, Int32 degress);
  505. /*
  506. * 设置视频合成层, 传入的是一个数组, 请正确填充每一层
  507. *
  508. * reserve: 这个参数保留, 当前请传0
  509. * confs: 层配置数组
  510. * count: 数组大小
  511. * flag: 目前传0
  512. * pReserve: 保留将来用
  513. *
  514. * 成功返回 NT_ERC_OK
  515. */
  516. [DllImport(@"x64\SmartPublisherSDK.dll", EntryPoint = "NT_PB_SetLayersConfig", CallingConvention = CallingConvention.StdCall)]
  517. public static extern UInt32 NT_PB_SetLayersConfig(IntPtr handle, Int32 reserve,
  518. [MarshalAs(UnmanagedType.LPArray)] ref NT_PB_LayerBaseConfig[] confs,
  519. Int32 count,
  520. UInt32 flag, IntPtr pReserve);
  521. /*
  522. * 清除所有层配置,注意这个接口只能在推送或者录像之前调用,否则结果未定义
  523. *
  524. * 这个接口主要是给C#使用,C++请直接使用SetLayersConfig
  525. *
  526. * reserve: 这个参数保留, 当前请传0
  527. * flag: 目前传0
  528. * pReserve: 保留将来用
  529. *
  530. * 成功返回 NT_ERC_OK
  531. */
  532. [DllImport(@"x64\SmartPublisherSDK.dll", EntryPoint = "NT_PB_ClearLayersConfig", CallingConvention = CallingConvention.StdCall)]
  533. public static extern UInt32 NT_PB_ClearLayersConfig(IntPtr handle, Int32 reserve,
  534. UInt32 flag, IntPtr pReserve);
  535. /*
  536. * 增加层配置,注意这个接口只能在推送或者录像之前调用,否则结果未定义
  537. *
  538. * 这个接口主要是给C#使用,C++请直接使用SetLayersConfig
  539. *
  540. * reserve: 这个参数保留,当前请传0
  541. * conf: 配置层
  542. * layer_type: 层类型
  543. * flag: 目前传0
  544. * pReserve: 保留将来用
  545. * 00000
  546. * 成功返回 NT_ERC_OK
  547. */
  548. [DllImport(@"x64\SmartPublisherSDK.dll", EntryPoint = "NT_PB_AddLayerConfig", CallingConvention = CallingConvention.StdCall)]
  549. public static extern UInt32 NT_PB_AddLayerConfig(IntPtr handle, Int32 reserve,
  550. IntPtr conf, Int32 layer_type,
  551. UInt32 flag, IntPtr pReserve);
  552. /*
  553. * 动态禁止或者启用层
  554. *
  555. * index: 层索引, 不能是第0层,如果传0的话,会失败
  556. * reserve: 保留字段,请传0
  557. * is_enable: 1表示能用,0表示禁止, 其他值直接返回错误
  558. *
  559. * 成功返回 NT_ERC_OK
  560. */
  561. [DllImport(@"x64\SmartPublisherSDK.dll")]
  562. public static extern UInt32 NT_PB_EnableLayer(IntPtr handle, Int32 reserve,
  563. Int32 index, Int32 is_enable);
  564. /*
  565. * 这个接口是给C#使用的, C++请使用上面的UpdateLayerConfig接口
  566. *
  567. * 更新层相关配置, 注意不是层的所有字段都可以更新,只是部分可以更新,并且有些层没有字段可以更新
  568. * 传入的参数,SDK只选择能更新的字段更新,不能更新的字段会被忽略
  569. * reserve: 保留字段,请传0
  570. * conf: 配置
  571. * flag: 请传0
  572. * pReserve: 保留字段,请传0
  573. *
  574. * 成功返回 NT_ERC_OK
  575. */
  576. [DllImport(@"x64\SmartPublisherSDK.dll", EntryPoint = "NT_PB_UpdateLayerConfigV2", CallingConvention = CallingConvention.StdCall)]
  577. public static extern UInt32 NT_PB_UpdateLayerConfigV2(IntPtr handle, Int32 reserve,
  578. IntPtr conf, Int32 layer_type,
  579. UInt32 flag, IntPtr pReserve);
  580. /*
  581. * 修改层区域
  582. *
  583. * pReserve: 保留字段,请传0
  584. *
  585. * 成功返回 NT_ERC_OK
  586. */
  587. [DllImport(@"x64\SmartPublisherSDK.dll", EntryPoint = "NT_PB_UpdateLayerRegion", CallingConvention = CallingConvention.StdCall)]
  588. public static extern UInt32 NT_PB_UpdateLayerRegion(IntPtr handle, Int32 reserve,
  589. Int32 index, ref NT_PB_RectRegion region);
  590. /*
  591. * 给index层投递Image数据,目前主要是用来把rgb和yuv视频数据传给相关层
  592. * reserve: 保留字段,请传0
  593. * index: 层索引
  594. * image: 图像
  595. * flag: 请传0
  596. * pReserve: 保留字段,请传0
  597. *
  598. * 成功返回 NT_ERC_OK
  599. */
  600. [DllImport(@"x64\SmartPublisherSDK.dll", EntryPoint = "NT_PB_PostLayerImage", CallingConvention = CallingConvention.StdCall)]
  601. public static extern UInt32 NT_PB_PostLayerImage(IntPtr handle, Int32 reserve,
  602. Int32 index, IntPtr image,
  603. UInt32 flag, IntPtr pReserve);
  604. /*+++视频截屏相关接口+++*/
  605. /*
  606. * 捕获图片
  607. * file_name_utf8: 文件名称,utf8编码
  608. * call_back_data: 回调时用户自定义数据
  609. * call_back: 回调函数,用来通知用户截图已经完成或者失败
  610. * 成功返回 NT_ERC_OK
  611. * 只有在推送或者录像时调用才可能成功,其他情况下调用,返回错误.
  612. * 因为生成PNG文件比较耗时,一般需要几百毫秒,为防止CPU过高,SDK会限制截图请求数量,当超过一定数量时,
  613. * 调用这个接口会返回NT_ERC_PB_TOO_MANY_CAPTURE_IMAGE_REQUESTS. 这种情况下, 请延时一段时间,等SDK处理掉一些请求后,再尝试.
  614. */
  615. [DllImport(@"x64\SmartPublisherSDK.dll", EntryPoint = "NT_PB_CaptureImage", CallingConvention = CallingConvention.StdCall)]
  616. public static extern UInt32 NT_PB_CaptureImage(IntPtr handle, IntPtr file_name_utf8,
  617. IntPtr call_back_data, NT_PB_SDKCaptureImageCallBack call_back);
  618. /*---视频截屏相关接口---*/
  619. /*+++视频编码相关接口+++*/
  620. /*
  621. * 获取视频硬编码器信息数
  622. * count: 返回的数量
  623. * 成功返回 NT_ERC_OK
  624. */
  625. [DllImport(@"x64\SmartPublisherSDK.dll")]
  626. public static extern UInt32 NT_PB_GetHWVideoEncoderInfoCount(ref Int32 count);
  627. /*
  628. * 获取视频硬编码信息
  629. * infos: 请先调用GetHWVideoEncoderInfoCount, 然后分配这个数组
  630. * info_array_size: 分配的数组大小
  631. * out_count: 实际返回的数量
  632. * 成功返回 NT_ERC_OK
  633. */
  634. [DllImport(@"x64\SmartPublisherSDK.dll")]
  635. public static extern UInt32 NT_PB_GetHWVideoEncoderInfos(IntPtr infos, Int32 info_array_size, ref Int32 out_count);
  636. /*
  637. * 设置软硬编码类型, 编码器, codec_id, 编码器其他参数.
  638. * type: 0为软编码, 1为硬编码, 默认是软编码.
  639. * encoder_id: 如果是软编码, 并且用h264, 可以设置0, 0用默认编码器, 也可以设置1, 设置1将使用OpenH264编码. 如果不是h264, 请设置成0; 如果是硬编码, 128为NVIDIA video encoder (NVENC), 填其他值接口返回错误.
  640. * param1: 如果是软编码,请设置0; 如果是硬编码且是NVENC, 这个参数用来设置GPU index, 设置-1的话SDK自动选择GPU.
  641. * codec_id: 设置h264或h265编码, 默认是h264, 请参考NT_MEDIA_CODEC_ID, h264填 NT_MEDIA_CODEC_ID_H264, h265填 NT_MEDIA_CODEC_ID_H265.
  642. * 注意: 软编码不支持h265, 硬编码根据实际硬件情况决定是否支持h265.
  643. * 如果调用了这个接口,请不要再调用SetVideoEncoderType接口
  644. * 成功返回 NT_ERC_OK
  645. */
  646. [DllImport(@"x64\SmartPublisherSDK.dll")]
  647. public static extern UInt32 NT_PB_SetVideoEncoder(IntPtr handle, Int32 type, Int32 encoder_id, UInt32 codec_id, Int32 param1);
  648. /*
  649. * 这个接口已经废弃, 请使用SetVideoEncoder接口
  650. *
  651. * 设置编码类型, 当前支持h264和h265(注意:h265只有64位sdk库支持, 在32位库上设置会失败)
  652. *
  653. * encoder_type: 1为h264, 2为h265, 默认为h264
  654. *
  655. * 成功返回 NT_ERC_OK
  656. */
  657. [DllImport(@"x64\SmartPublisherSDK.dll")]
  658. public static extern UInt32 NT_PB_SetVideoEncoderType(IntPtr handle, Int32 encoder_type);
  659. /*
  660. * 注意,码率控制两种方式,要么是 SetVideoQuality + SetVideoMaxBitRate
  661. * 要么是 SetVideoMaxBitRate + SetVideoBitRate
  662. * 对于OpenH264, 只支持 SetVideoMaxBitRate + SetVideoBitRate方式
  663. */
  664. /*
  665. * 设置视频质量, 范围[0-20], 默认是10, 值越小质量越好,但码率会越大
  666. * 建议用NT_PB_SetVideoQualityV2(注意:请看v2具体参数和范围)
  667. * 注意:用OpenH264编码器时调用这个接口无用
  668. */
  669. [DllImport(@"x64\SmartPublisherSDK.dll")]
  670. public static extern UInt32 NT_PB_SetVideoQuality(IntPtr handle, Int32 quality);
  671. /*
  672. * 设置视频质量, 范围[1-50], 值越小视频质量越好,但码率会越大. 请优先考虑默认值
  673. *
  674. * 对于H264, 默认值23
  675. * 对于H265, 默认值28
  676. * 注意:用OpenH264编码器时调用这个接口无用
  677. */
  678. [DllImport(@"x64\SmartPublisherSDK.dll")]
  679. public static extern UInt32 NT_PB_SetVideoQualityV2(IntPtr handle, Int32 quality);
  680. /*
  681. * 设置最大视频码率, 单位kbps
  682. */
  683. [DllImport(@"x64\SmartPublisherSDK.dll")]
  684. public static extern UInt32 NT_PB_SetVideoMaxBitRate(IntPtr handle, Int32 kbit_rate);
  685. /*
  686. * 设置视频码率, 单位kbps, 默认是0,不使用平均码率方式
  687. * 注意:用OpenH264编码器时调需要设置适当的值
  688. */
  689. [DllImport(@"x64\SmartPublisherSDK.dll")]
  690. public static extern UInt32 NT_PB_SetVideoBitRate(IntPtr handle, Int32 kbit_rate);
  691. /*
  692. * 在一些特殊场景下, 视频分辨率会改变, 如果设置一个固定码率的的话,当视频分辨率变大的时候会变的模糊,变小的话又会浪费码率
  693. * 所以提供可以设置一组码率的接口,满足不同分辨率切换的需求
  694. * 规则: 比如设置两组分辨率 640*360, 640*480, 那么当分辨率小于等于640*360时都使用640*360的码率,
  695. * 当分辨率大于640*360且小于等于640*480时,就使用640*480的码率,如果分辨率大于640*480 那就使用640*480的分辨率
  696. * 为了设置的更准确, 建议多划分几组, 让区间变小
  697. * 调用这个接口每次设置一组,设置多组就调用多次
  698. * item对应 NT_PB_VideoEncoderBitrateGroupItem
  699. */
  700. [DllImport(@"x64\SmartPublisherSDK.dll")]
  701. public static extern UInt32 NT_PB_AddVideoEncoderBitrateGroupItem(IntPtr handle, IntPtr item);
  702. /*
  703. * 清除视频码率组
  704. */
  705. [DllImport(@"x64\SmartPublisherSDK.dll")]
  706. public static extern UInt32 NT_PB_ClearVideoEncoderBitrateGroup(IntPtr handle);
  707. /*
  708. * 设置关键帧间隔, 比如1表示所有帧都是关键帧,10表示每10帧里面一个关键帧,25表示每25帧一个关键帧
  709. */
  710. [DllImport(@"x64\SmartPublisherSDK.dll")]
  711. public static extern UInt32 NT_PB_SetVideoKeyFrameInterval(IntPtr handle, Int32 interval);
  712. /*
  713. * 设置H264 profile.
  714. *
  715. * profile: 1: H264 baseline(默认值). 2: H264 main. 3. H264 high
  716. * 注意:用OpenH264编码器时不支持main profile, 如果设置成main profile的话,会回落到baseline profile.
  717. *
  718. * 成功返回 NT_ERC_OK
  719. */
  720. [DllImport(@"x64\SmartPublisherSDK.dll")]
  721. public static extern UInt32 NT_PB_SetVideoEncoderProfile(IntPtr handle, Int32 profile);
  722. /*
  723. * 设置视频编码速度
  724. *
  725. * speed: 范围是 1 到 6, 值越小,速度越快,质量也越差
  726. */
  727. [DllImport(@"x64\SmartPublisherSDK.dll")]
  728. public static extern UInt32 NT_PB_SetVideoEncoderSpeed(IntPtr handle, Int32 speed);
  729. /*
  730. * 设置视频编码量化范围, 设置最小值
  731. * qp_min: h264和h265设置范围都是[0, 51], 设置-1的话,编码器使用默认值;
  732. * 注意目前只对OpenH264有效
  733. * 成功返回 NT_ERC_OK
  734. */
  735. [DllImport(@"x64\SmartPublisherSDK.dll")]
  736. public static extern UInt32 NT_PB_SetVideoEncoderQPMin(IntPtr handle, Int32 qp_min);
  737. /*
  738. * 设置视频编码量化范围, 设置最小值
  739. * qp_max: h264和h265设置范围都是[0, 51], 设置-1的话,编码器使用默认值;
  740. * 注意目前只对OpenH264有效
  741. * 成功返回 NT_ERC_OK
  742. */
  743. [DllImport(@"x64\SmartPublisherSDK.dll")]
  744. public static extern UInt32 NT_PB_SetVideoEncoderQPMax(IntPtr handle, Int32 qp_max);
  745. /*
  746. * 不同的视频编码器一般会有一些特定的选项, 这个接口可以设置这些选项
  747. * option_name: 选项名称
  748. * option_value: 选项值
  749. * 成功返回 NT_ERC_OK
  750. * ********************************************
  751. * ***********OpenH264选项说明******************
  752. * 可以设置的选项有: "usage_type", "rc_mode", "enable_frame_skip"
  753. * "usage_type": 编码场景, 可以设置0和1, 0是实时摄像头编码, 1是实时屏幕编码, sdk默认是0;
  754. * "rc_mode": 码率控制模式, 可以设置0和1, 0是质量模式, 1是码率模式, sdk默认是1;
  755. * "enable_frame_skip": 通过跳帧的方式来控制码率, 设置0是关闭跳帧, 1是打开跳帧, sdk默认是0;
  756. * ***********OpenH264选项说明******************
  757. * ********************************************
  758. */
  759. [DllImport(@"x64\SmartPublisherSDK.dll")]
  760. public static extern UInt32 NT_PB_SetVideoEncoderSpecialInt32Option(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] String option_name, Int32 option_value);
  761. /*
  762. * 清除编码器所有设置的特定选项
  763. * 成功返回 NT_ERC_OK
  764. */
  765. [DllImport(@"x64\SmartPublisherSDK.dll")]
  766. public static extern UInt32 NT_PB_ClearVideoEncoderSpecialOptions(IntPtr handle);
  767. /*
  768. * 这个接口已经被废弃,请不要调用它.
  769. * 设置是否对图像进行相同比较,相同图像比较一般在采集桌面时有一定好处,可能能降低码率
  770. * is_compare_image: 1:表示比较, 0:表示不比较, 其他值无效
  771. * max_frame_interval:
  772. */
  773. [DllImport(@"x64\SmartPublisherSDK.dll")]
  774. public static extern UInt32 NT_PB_SetVideoCompareSameImage(IntPtr handle, Int32 is_compare_image, UInt32 max_frame_interval);
  775. /*
  776. * 这个接口已经被废弃,请不要调用它.
  777. * 设置视频最大关键帧间隔, 这个接口一般不使用,这里是用来配合SetVideoCompareSameImage接口的.
  778. * 比如开启图像比较后,SDK发现连续20s图像都是相同的,但播放端需要收到关键帧才能解码播放,所以需要一个限制.
  779. * interval:单位是毫秒,请和SetVideoKeyFrameInterval接口区分开,他们的参数设置方式是不同的
  780. */
  781. [DllImport(@"x64\SmartPublisherSDK.dll")]
  782. public static extern UInt32 NT_PB_SetVideoMaxKeyFrameInterval(IntPtr handle, Int32 interval);
  783. /*+++音频相关接口+++*/
  784. /*
  785. * 获取系统音频输入设备数
  786. */
  787. [DllImport(@"x64\SmartPublisherSDK.dll")]
  788. public static extern UInt32 NT_PB_GetAuidoInputDeviceNumber(ref Int32 pNumer);
  789. /*
  790. * 获取音频输入设备名称
  791. *
  792. * device_id: 设备ID,需要输入,从0开始,最大值不能超过设备数
  793. * device_name_buff: 设备名称,返回的字符串以0结尾
  794. * device_name_buff_size: 设备名称buffer的大小,建议512
  795. */
  796. [DllImport(@"x64\SmartPublisherSDK.dll")]
  797. public static extern UInt32 NT_PB_GetAuidoInputDeviceName(UInt32 device_id, byte[] device_name_buff, UInt32 device_name_buff_size);
  798. /*
  799. * 设置推送音频编码类型
  800. *
  801. * type: 1:使用AAC编码, 2:使用speex编码, 其他值返回错误
  802. *
  803. * 成功返回 NT_ERC_OK
  804. */
  805. [DllImport(@"x64\SmartPublisherSDK.dll")]
  806. public static extern UInt32 NT_PB_SetPublisherAudioCodecType(IntPtr handle, Int32 type);
  807. /*
  808. * 设置推送Speex编码质量
  809. *
  810. * quality: 范围是0-10, 默认是8:大约28kbps, 值越大,质量越好,码率也越大
  811. *
  812. * 成功返回 NT_ERC_OK
  813. */
  814. [DllImport(@"x64\SmartPublisherSDK.dll")]
  815. public static extern UInt32 NT_PB_SetPublisherSpeexEncoderQuality(IntPtr handle, Int32 quality);
  816. /*
  817. * 设置推送静音
  818. * is_mute: 0表示不静音, 1表示静音
  819. */
  820. [DllImport(@"x64\SmartPublisherSDK.dll")]
  821. public static extern UInt32 NT_PB_SetMute(IntPtr handle, Int32 is_mute);
  822. /*
  823. * 设置音频输入设备ID
  824. *
  825. * device_id: 设备id, 一般从0开始
  826. */
  827. [DllImport(@"x64\SmartPublisherSDK.dll")]
  828. public static extern UInt32 NT_PB_SetAuidoInputDeviceId(IntPtr handle, UInt32 device_id);
  829. /*
  830. * 检查是否能捕获扬声器音频
  831. *
  832. * out_flag: 1表示可以捕获扬声器,0:表示不可以捕获扬声器
  833. */
  834. [DllImport(@"x64\SmartPublisherSDK.dll")]
  835. public static extern UInt32 NT_PB_IsCanCaptureSpeaker(ref Int32 out_flag);
  836. /*
  837. *设置采集扬声器时是否补偿静音帧 这个只在auido_option是NT_PB_E_AUDIO_OPTION_CAPTURE_SPEAKER有效
  838. *is_compensation: 1表示补偿, 0表示补偿, 设置其他值无效
  839. *成功返回 NT_ERC_OK
  840. */
  841. [DllImport(@"x64\SmartPublisherSDK.dll")]
  842. public static extern UInt32 NT_PB_SetCaptureSpeakerCompensateMute(IntPtr handle, Int32 is_compensation);
  843. /*
  844. * 设置回音消除
  845. *
  846. * isCancel:1表示消除回音,0表示不消除回音
  847. * delay: 回音时延,单位是毫秒,目前推荐设置100ms, 如果设置为0的话,将使用100ms
  848. * 注意这个只对麦克风捕获有作用,扬声器捕获无效
  849. *
  850. * 成功返回 NT_ERC_OK
  851. */
  852. [DllImport(@"x64\SmartPublisherSDK.dll")]
  853. public static extern UInt32 NT_PB_SetEchoCancellation(IntPtr handle, Int32 isCancel, Int32 delay);
  854. /*
  855. * 设置音频噪音抑制
  856. *
  857. * isNS: 1表示噪音抑制, 0表示不抑制
  858. * 注意,这个一般用在采集麦克风上,采集系统播放声音时必须要性不大
  859. *
  860. * 成功返回 NT_ERC_OK
  861. */
  862. [DllImport(@"x64\SmartPublisherSDK.dll")]
  863. public static extern UInt32 NT_PB_SetNoiseSuppression(IntPtr handle, Int32 isNS);
  864. /*
  865. * 设置音频自动增益控制
  866. *
  867. * isAGC: 1表示增益控制, 0表示不控制
  868. * 注意,这个一般用在采集麦克风上,采集系统播放声音时必须要性不大
  869. *
  870. * 成功返回 NT_ERC_OK
  871. */
  872. [DllImport(@"x64\SmartPublisherSDK.dll")]
  873. public static extern UInt32 NT_PB_SetAGC(IntPtr handle, Int32 isAGC);
  874. /*
  875. * 设置端点检测(Voice Activity Detection (VAD))
  876. *
  877. * isVAD: 1表示端点检测, 0表示不检测
  878. * 注意,这个一般用在采集麦克风上,采集系统播放音乐声音时效果不好
  879. *
  880. * 成功返回 NT_ERC_OK
  881. */
  882. [DllImport(@"x64\SmartPublisherSDK.dll")]
  883. public static extern UInt32 NT_PB_SetVAD(IntPtr handle, Int32 isVAD);
  884. /*
  885. *设置输入音量, 这个接口一般不建议调用, 在一些特殊情况下可能会用, 一般不建议放大音量
  886. *index: 一般是0和1, 如果没有混音的只用0, 有混音的话, 0,1分别设置音量
  887. *volume: 音量,默认是1.0,范围是[0.0, 5.0], 设置成0静音, 1音量不变
  888. *成功返回 NT_ERC_OK
  889. */
  890. [DllImport(@"x64\SmartPublisherSDK.dll")]
  891. public static extern UInt32 NT_PB_SetInputAudioVolume(IntPtr handle, Int32 index, float volume);
  892. /*+++录像相关接口+++*/
  893. /*
  894. * 设置本地录像目录, 必须是英文目录,否则会失败
  895. */
  896. [DllImport(@"x64\SmartPublisherSDK.dll")]
  897. public static extern UInt32 NT_PB_SetRecorderDirectory(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] String dir, IntPtr pReserve);
  898. /*
  899. * 设置单个录像文件最大大小, 当超过这个值的时候,将切割成第二个文件
  900. *
  901. * size: 单位是KB(1024Byte), 当前范围是 [5MB-1G], 超出将被设置到范围内
  902. */
  903. [DllImport(@"x64\SmartPublisherSDK.dll")]
  904. public static extern UInt32 NT_PB_SetRecorderFileMaxSize(IntPtr handle, UInt32 size);
  905. /*
  906. * 设置录像文件名生成规则
  907. */
  908. [DllImport(@"x64\SmartPublisherSDK.dll", EntryPoint = "NT_PB_SetRecorderFileNameRuler", CallingConvention = CallingConvention.StdCall)]
  909. public static extern UInt32 NT_PB_SetRecorderFileNameRuler(IntPtr handle, ref NT_PB_RecorderFileNameRuler ruler);
  910. /*
  911. * 启动录像
  912. */
  913. [DllImport(@"x64\SmartPublisherSDK.dll")]
  914. public static extern UInt32 NT_PB_StartRecorder(IntPtr handle, IntPtr pReserve);
  915. /*
  916. * 暂停录像
  917. *
  918. * is_pause: 1表示暂停, 0表示恢复录像, 输入其他值将调用失败
  919. *
  920. * 成功返回NT_ERC_OK
  921. * 返回NT_ERC_PB_NEED_RETRY, 请隔一段时间再尝试调用
  922. */
  923. [DllImport(@"x64\SmartPublisherSDK.dll")]
  924. public static extern UInt32 NT_PB_PauseRecorder(IntPtr hanlde, Int32 is_pause);
  925. /*
  926. * 停止录像
  927. */
  928. [DllImport(@"x64\SmartPublisherSDK.dll")]
  929. public static extern UInt32 NT_PB_StopRecorder(IntPtr handle);
  930. /*+++预览相关接口+++*/
  931. /*
  932. * 设置预览图像回调
  933. * image_format: 请参考NT_PB_E_IMAGE_FORMAT,只能是NT_PB_E_IMAGE_FORMAT_RGB32, NT_PB_E_IMAGE_FORMAT_I420
  934. */
  935. [DllImport(@"x64\SmartPublisherSDK.dll")]
  936. public static extern UInt32 NT_PB_SetVideoPreviewImageCallBack(IntPtr handle, Int32 image_format, IntPtr call_back_data, NT_PB_SDKVideoPreviewImageCallBack call_back);
  937. /*
  938. * 启动预览
  939. * reserve1: 保留参数传0
  940. * pReserve2: 保留参数传NULL
  941. */
  942. [DllImport(@"x64\SmartPublisherSDK.dll")]
  943. public static extern UInt32 NT_PB_StartPreview(IntPtr handle, UInt32 reserve1, IntPtr pReserve2);
  944. /*
  945. * 停止预览
  946. */
  947. [DllImport(@"x64\SmartPublisherSDK.dll")]
  948. public static extern UInt32 NT_PB_StopPreview(IntPtr handle);
  949. /*---预览相关接口---*/
  950. /*
  951. * 投递编码过的视频数据给SDK
  952. * codec_id:请参考NT_MEDIA_CODEC_ID, 注意不要传递auido codec id,否则结果没有定义
  953. * data: 编码数据
  954. * size: 编码数据大小
  955. * is_key_frame: 1:表示是关键帧, 0:表示不是
  956. * timestamp: 时间戳
  957. * 成功返回 NT_ERC_OK
  958. */
  959. [DllImport(@"x64\SmartPublisherSDK.dll")]
  960. public static extern UInt32 NT_PB_PostVideoEncodedData(IntPtr handle, UInt32 codec_id,
  961. IntPtr data, UInt32 size,
  962. Int32 is_key_frame, UInt64 timestamp);
  963. /*
  964. * 投递编码过的视频数据给SDK V2版
  965. * codec_id:请参考NT_MEDIA_CODEC_ID, 注意不要传递auido codec id,否则结果没有定义
  966. * data: 编码数据
  967. * size: 编码数据大小
  968. * is_key_frame: 1:表示是关键帧, 0:表示不是
  969. * timestamp: 解码时间戳
  970. * presentation_timestamp: 显示时间戳
  971. * 注意:请确保 presentation_timestamp >= timestamp, 否则结果未定义
  972. * 成功返回 NT_ERC_OK
  973. */
  974. [DllImport(@"x64\SmartPublisherSDK.dll")]
  975. public static extern UInt32 NT_PB_PostVideoEncodedDataV2(IntPtr handle, UInt32 codec_id,
  976. IntPtr data, UInt32 size,
  977. Int32 is_key_frame, UInt64 timestamp, UInt64 presentation_timestamp);
  978. /*
  979. * 投递编码过的音频数据给SDK
  980. *codec_id:请参考NT_MEDIA_CODEC_ID, 注意不要传递video codec id,否则结果没有定义
  981. * data: 编码数据
  982. * size: 编码数据大小
  983. * is_key_frame: 1:表示是关键帧, 0:表示不是
  984. * timestamp: 时间戳
  985. * parameter_info: 当编码是aac的时候,这个是AudioSpecificConfig, 其他编码请传NULL
  986. * parameter_info_size: parameter_info 长度
  987. * 成功返回 NT_ERC_OK
  988. */
  989. [DllImport(@"x64\SmartPublisherSDK.dll")]
  990. public static extern UInt32 NT_PB_PostAudioEncodedData(IntPtr handle, UInt32 codec_id,
  991. IntPtr data, UInt32 size,
  992. Int32 is_key_frame, UInt64 timestamp,
  993. IntPtr parameter_info,
  994. UInt32 parameter_info_size);
  995. /*
  996. * 投递PCM音频数据给SDK, 每10ms音频数据传入一次
  997. *
  998. * data: pcm数据, 注意每个采样必须是16位的,其他格式不支持, 注意双通道的话数据是交错的
  999. * size: pcm数据大小
  1000. * timestamp:时间戳单位是毫秒,必须是递增的
  1001. * sample_rate: 采样率
  1002. * channels: 通道, 当前通道只支持1和2,也就是单通道和双通道
  1003. * per_channel_sample_number: 这个请传入的是 sampleRate/100, 也就是单个通道的10毫秒的采样数
  1004. */
  1005. [DllImport(@"x64\SmartPublisherSDK.dll")]
  1006. public static extern UInt32 NT_PB_PostAudioPCMData(IntPtr handle,
  1007. IntPtr data, UInt32 size, UInt64 timestamp,
  1008. Int32 sample_rate, Int32 channels, Int32 per_channel_sample_number);
  1009. /*
  1010. * 投递用来混音的PCM音频数据给SDK, 每10ms音频数据传入一次
  1011. * 这个接口只有在auido_option是NT_PB_E_AUDIO_OPTION_MIC_EXTERNAL_PCM_MIXER使用,其他情况下报错
  1012. * 当前只支持一路外部音频和内置麦克风混音
  1013. *
  1014. * data: pcm数据, 注意每个采样必须是16位的,其他格式不支持, 注意双通道的话数据是交错的
  1015. * size: pcm数据大小
  1016. * timestamp:时间戳单位是毫秒,必须是递增的
  1017. * sample_rate: 采样率
  1018. * channels: 通道, 当前通道只支持1和2,也就是单通道和双通道
  1019. * per_channel_sample_number: 这个请传入的是 sampleRate/100, 也就是单个通道的10毫秒的采样数
  1020. */
  1021. [DllImport(@"x64\SmartPublisherSDK.dll")]
  1022. public static extern UInt32 NT_PB_PostAudioExternalPCMMixerData(IntPtr handle,
  1023. IntPtr data, UInt32 size, UInt64 timestamp,
  1024. Int32 sample_rate, Int32 channels, Int32 per_channel_sample_number);
  1025. /*++++发送用户自定义数据相关接口++++*/
  1026. /*
  1027. * 1. 目前使用sei机制发送用户自定数据到播放端
  1028. * 2. 这种机制有可能会丢失数据, 所以这种方式不保证接收端一定能收到
  1029. * 3. 优势:能和视频保持同步,虽然有可能丢失,但一般的需求都满足了
  1030. * 4. 目前提供两种发送方式 第一种发送二进制数据, 第二种发送 utf8字符串
  1031. */
  1032. /*
  1033. * 设置发送队列大小,为保证实时性,默认大小为3, 必须设置一个大于0的数
  1034. * 如果数据超过队列大小,将丢掉队头数据
  1035. * 这个接口请在 StartPublisher 之前调用
  1036. */
  1037. [DllImport(@"x64\SmartPublisherSDK.dll")]
  1038. public static extern UInt32 NT_PB_SetPostUserDataQueueMaxSize(IntPtr handle, Int32 max_size, Int32 reserve);
  1039. /*
  1040. * 清空用户数据队列, 有些情况可能会用到,比如发送队列里面有4条消息再等待发送,又想把最新的消息快速发出去, 可以
  1041. * 先清除掉正在排队消息, 再调用PostUserXXX
  1042. */
  1043. [DllImport(@"x64\SmartPublisherSDK.dll")]
  1044. public static extern UInt32 NT_PB_ClearPostUserDataQueue(IntPtr handle);
  1045. /*
  1046. * 发送二进制数据
  1047. * data: 二进制数据
  1048. * size:数据大小
  1049. * 注意: 1.目前数据大小限制在256个字节以内,太大可能会影响视频传输,如果有特殊需求,需要增大限制,请联系我们
  1050. * 2. 如果积累的数据超过了设置的队列大小,之前的队头数据将被丢弃
  1051. * 3. 必须再调用StartPublisher之后再发送数据
  1052. */
  1053. [DllImport(@"x64\SmartPublisherSDK.dll")]
  1054. public static extern UInt32 NT_PB_PostUserData(IntPtr handle, IntPtr data, UInt32 size, Int32 reserve);
  1055. /*
  1056. * 发送utf8字符串
  1057. * utf8_str: utf8字符串
  1058. * 注意: 1. 字符串长度不能超过256, 太大可能会影响视频传输,如果有特殊需求,需要增大限制,请联系我们
  1059. * 2. 如果积累的数据超过了设置的队列大小,之前的队头数据将被丢弃
  1060. * 3. 必须再调用StartPublisher之后再发送数据
  1061. */
  1062. [DllImport(@"x64\SmartPublisherSDK.dll")]
  1063. public static extern UInt32 NT_PB_PostUserUTF8StringData(IntPtr handle, byte[] utf8_str, Int32 reserve);
  1064. /*
  1065. 设置休眠模式
  1066. mode: 1表示休眠, 0表示不休眠
  1067. reserve: 保留参数, 当前传0
  1068. 成功返回NT_ERC_OK
  1069. */
  1070. [DllImport(@"x64\SmartPublisherSDK.dll")]
  1071. public static extern UInt32 NT_PB_SetSleepMode(IntPtr handle, Int32 mode, Int32 reserve);
  1072. /*----发送用户自定义数据相关接口----*/
  1073. /*
  1074. * 万能接口, 设置参数, 大多数问题, 这些接口都能解决
  1075. */
  1076. [DllImport(@"x64\SmartPublisherSDK.dll")]
  1077. public static extern UInt32 NT_PB_SetParam(IntPtr handle, UInt32 id, IntPtr pData);
  1078. /*
  1079. * 万能接口, 得到参数, 大多数问题,这些接口都能解决
  1080. */
  1081. [DllImport(@"x64\SmartPublisherSDK.dll")]
  1082. public static extern UInt32 NT_PB_GetParam(IntPtr handle, UInt32 id, IntPtr pData);
  1083. /*+++屏幕选取工具+++*/
  1084. /*
  1085. * 注意这个接口返回的句柄,一定要和上面的推送时用的Open接口返回的句柄区分开
  1086. * 完全是不同的句柄,用错结果未定义
  1087. */
  1088. /*
  1089. * 打开一个屏幕选取工具的toolHandle
  1090. *
  1091. * mode: 请参考NT_PB_E_SCREEN_REGION_CHOOSE_MODE
  1092. * mode_data: mode == NT_PB_E_SCREEN_REGION_CHOOSE_MODE_CHOOSE, mode_data 是NULL.
  1093. * mode == NT_PB_E_SCREEN_REGION_CHOOSE_MODE_MOVE, mode_data 是NT_PB_RectRegion*
  1094. * callback: 这个必须要有,并且必须处理, 否则资源泄漏
  1095. * callback_data: callback data
  1096. * flag目前传0,后面扩展用
  1097. * pReserve传NULL,扩展用
  1098. *
  1099. * 成功返回 NT_ERC_OK
  1100. */
  1101. [DllImport(@"x64\SmartPublisherSDK.dll")]
  1102. public static extern UInt32 NT_PB_OpenScreenRegionChooseTool(ref IntPtr pToolHandle,
  1103. UInt32 mode,
  1104. IntPtr mode_data,
  1105. NT_PB_SDKScreenRegionChooseCallBack callback,
  1106. IntPtr callback_data,
  1107. UInt32 flag, IntPtr pReserve);
  1108. /*
  1109. * 调用这个接口之后toolHandle失效
  1110. *
  1111. * 成功返回 NT_ERC_OK
  1112. */
  1113. [DllImport(@"x64\SmartPublisherSDK.dll")]
  1114. public static extern UInt32 NT_PB_CloseScreenRegionChooseTool(IntPtr toolHandle);
  1115. /*+++rtsp server操作接口+++*/
  1116. /*
  1117. * 创建一个rtsp server
  1118. * pRtspServerHandle: rtsp server 句柄
  1119. * reserve:保留参数传0
  1120. * 成功返回 NT_ERC_OK
  1121. */
  1122. [DllImport(@"x64\SmartPublisherSDK.dll")]
  1123. public static extern UInt32 NT_PB_OpenRtspServer(ref IntPtr pRtspServerHandle, Int32 reserve);
  1124. /*
  1125. * 设置rtsp server 监听端口, 在StartRtspServer之前必须要设置端口
  1126. * rtsp_server_handle: rtsp server 句柄
  1127. * port: 端口号,可以设置为554,或者是1024到65535之间,其他值返回失败
  1128. * 成功返回 NT_ERC_OK
  1129. */
  1130. [DllImport(@"x64\SmartPublisherSDK.dll")]
  1131. public static extern UInt32 NT_PB_SetRtspServerPort(IntPtr rtsp_server_handle, Int32 port);
  1132. /*
  1133. * 设置rtsp server 鉴权用户名和密码, 这个可以不设置,只有需要鉴权的再设置
  1134. * rtsp_server_handle: rtsp server 句柄
  1135. * user_name: 用户名,必须是英文
  1136. * password:密码,必须是英文
  1137. * 成功返回 NT_ERC_OK
  1138. */
  1139. [DllImport(@"x64\SmartPublisherSDK.dll")]
  1140. public static extern UInt32 NT_PB_SetRtspServerUserNamePassword(IntPtr rtsp_server_handle, [MarshalAs(UnmanagedType.LPStr)] String user_name, [MarshalAs(UnmanagedType.LPStr)] String password);
  1141. /*
  1142. * 设置rtsp server 组播, 如果server设置成组播就不能单播,组播和单播只能选一个, 一般来说单播网络设备支持的好,wifi组播很多路由器不支持
  1143. * rtsp_server_handle: rtsp server 句柄
  1144. * is_multicast: 是否组播, 1为组播, 0为单播, 其他值接口返回错误, 默认是单播
  1145. * 成功返回 NT_ERC_OK
  1146. */
  1147. [DllImport(@"x64\SmartPublisherSDK.dll")]
  1148. public static extern UInt32 NT_PB_SetRtspServerMulticast(IntPtr rtsp_server_handle, Int32 is_multicast);
  1149. /*
  1150. * 设置rtsp server 组播组播地址
  1151. * rtsp_server_handle: rtsp server 句柄
  1152. * multicast_address: 组播地址
  1153. * 如果设置的不是组播地址, 将返回错误
  1154. * 组播地址范围说明: [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]
  1155. * 成功返回 NT_ERC_OK
  1156. */
  1157. [DllImport(@"x64\SmartPublisherSDK.dll")]
  1158. public static extern UInt32 NT_PB_SetRtspServerMulticastAddress(IntPtr rtsp_server_handle, [MarshalAs(UnmanagedType.LPStr)] String multicast_address);
  1159. /*
  1160. * 获取rtsp server当前的客户会话数, 这个接口必须在StartRtspServer之后再调用
  1161. * rtsp_server_handle: rtsp server 句柄
  1162. * session_numbers: 会话数
  1163. * 成功返回 NT_ERC_OK
  1164. */
  1165. [DllImport(@"x64\SmartPublisherSDK.dll")]
  1166. public static extern UInt32 NT_PB_GetRtspServerClientSessionNumbers(IntPtr rtsp_server_handle, ref Int32 session_numbers);
  1167. /*
  1168. * 启动rtsp server
  1169. * rtsp_server_handle: rtsp server 句柄
  1170. * reserve: 保留参数传0
  1171. * 成功返回 NT_ERC_OK
  1172. */
  1173. [DllImport(@"x64\SmartPublisherSDK.dll")]
  1174. public static extern UInt32 NT_PB_StartRtspServer(IntPtr rtsp_server_handle, Int32 reserve);
  1175. /*
  1176. * 停止rtsp server
  1177. * rtsp_server_handle: rtsp server 句柄
  1178. * 成功返回 NT_ERC_OK
  1179. */
  1180. [DllImport(@"x64\SmartPublisherSDK.dll")]
  1181. public static extern UInt32 NT_PB_StopRtspServer(IntPtr rtsp_server_handle);
  1182. /*
  1183. * 关闭rtsp server
  1184. * 调用这个接口之后rtsp_server_handle失效,
  1185. * 成功返回 NT_ERC_OK
  1186. */
  1187. [DllImport(@"x64\SmartPublisherSDK.dll")]
  1188. public static extern UInt32 NT_PB_CloseRtspServer(IntPtr rtsp_server_handle);
  1189. /*---rtsp server操作接口---*/
  1190. /*
  1191. * 分配Image, 分配后,SDK内部会初始化这个结构体, 失败的话返回NULL
  1192. */
  1193. [DllImport(@"x64\SmartPublisherSDK.dll")]
  1194. public static extern IntPtr NT_PB_AllocateImage();
  1195. /*
  1196. * 释放Image, 注意一定要调用这个接口释放内存,如果在你自己的模块中释放,Windows会出问题的
  1197. *
  1198. * 成功返回 NT_ERC_OK
  1199. */
  1200. [DllImport(@"x64\SmartPublisherSDK.dll", EntryPoint = "NT_PB_FreeImage", CallingConvention = CallingConvention.StdCall)]
  1201. public static extern UInt32 NT_PB_FreeImage(ref NT_PB_Image[] ppImage);
  1202. /*
  1203. * 克隆一个Image, 失败返回NULL
  1204. */
  1205. [DllImport(@"x64\SmartPublisherSDK.dll", EntryPoint = "NT_PB_CloneImage", CallingConvention = CallingConvention.StdCall)]
  1206. public static extern IntPtr NT_PB_CloneImage(ref NT_PB_Image src);
  1207. /*
  1208. * 拷贝Image, 会先释放dst的资源,然后再拷贝
  1209. *
  1210. * 成功返回 NT_ERC_OK
  1211. */
  1212. [DllImport(@"x64\SmartPublisherSDK.dll", EntryPoint = "NT_PB_CopyImage", CallingConvention = CallingConvention.StdCall)]
  1213. public static extern UInt32 NT_PB_CopyImage(ref NT_PB_Image dst, NT_PB_Image src);
  1214. /*
  1215. * 给图像一个面设置数据,如果这个面已经有数据,将会释放掉再设置
  1216. *
  1217. * 这个设置行为依赖于NT_PB_Image::format_
  1218. *
  1219. * 成功返回 NT_ERC_OK
  1220. */
  1221. [DllImport(@"x64\SmartPublisherSDK.dll", EntryPoint = "NT_PB_SetImagePlane", CallingConvention = CallingConvention.StdCall)]
  1222. public static extern UInt32 NT_PB_SetImagePlane(ref NT_PB_Image image, Int32 plane,
  1223. Int32 planeStride, SByte planeData, Int32 planeDataSize);
  1224. /*
  1225. * 加载PNG图片
  1226. *
  1227. * file_name_utf8: 必须是utf8编码
  1228. *
  1229. * 成功返回 NT_ERC_OK
  1230. */
  1231. [DllImport(@"x64\SmartPublisherSDK.dll", EntryPoint = "NT_PB_LoadImage", CallingConvention = CallingConvention.StdCall)]
  1232. public static extern UInt32 NT_PB_LoadImage(
  1233. [MarshalAs(UnmanagedType.LPStr)] String file_name_utf8,
  1234. ref NT_PB_Image ppImage
  1235. );
  1236. /*
  1237. * 绘制相关接口, 绘制后续可能会提供更多接口
  1238. */
  1239. /*
  1240. * 成功返回NT_ERC_OK
  1241. */
  1242. [DllImport(@"x64\SmartPublisherSDK.dll", EntryPoint = "NT_PB_Draw", CallingConvention = CallingConvention.StdCall)]
  1243. public static extern UInt32 NT_PB_Draw(int hdc, Int32 xDst, Int32 yDst,
  1244. Int32 dstWidth, Int32 dstHeight,
  1245. Int32 xSrc, Int32 ySrc,
  1246. Int32 srcWidth, Int32 srcHeight,
  1247. ref NT_PB_Image image);
  1248. /*
  1249. * 设置授权Key
  1250. *
  1251. * reserve1: 请传0
  1252. * reserve2: 请传NULL
  1253. * 成功返回: NT_ERC_OK
  1254. */
  1255. [DllImport(@"x64\SmartPublisherSDK.dll")]
  1256. public static extern UInt32 NT_PB_SetSDKClientKey([MarshalAs(UnmanagedType.LPStr)] String cid, [MarshalAs(UnmanagedType.LPStr)] String key, Int32 reserve1, IntPtr reserve2);
  1257. }
  1258. }