日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

Windows平台RTMP推送摄像头对接介绍

發(fā)布時(shí)間:2025/3/12 windows 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windows平台RTMP推送摄像头对接介绍 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

背景

好多開發(fā)者在對(duì)接大牛直播SDK(官方)的Windows平臺(tái)RTMP推送時(shí),不熟悉攝像頭調(diào)用,實(shí)際上,攝像頭調(diào)用邏輯并不復(fù)雜,以下是大概流程:

  • 首先調(diào)用我們sdk接口獲取攝像頭個(gè)數(shù),調(diào)用接口是:GetVideoCaptureDeviceNumber()
  • 接著需要獲取每個(gè)攝像頭的id和name,調(diào)用接口是:GetVideoCaptureDeviceInfo()
  • 接下來(lái)針對(duì)某個(gè)指定的攝像頭,需要獲取它的分辨率列表個(gè)數(shù),?調(diào)用接口是:GetVideoCaptureDeviceCapabilityNumber()
  • 根據(jù)攝像頭id和分辨率的index,獲取實(shí)際的分辨率,調(diào)用接口:GetVideoCaptureDeviceCapability()
  • 對(duì)的,比如一個(gè)攝像頭有四個(gè)分辨率?(1920*1080,1080*720,640*480,?320*240),?調(diào)用GetVideoCaptureDeviceCapabilityNumber?拿到的值就是4,想拿第一個(gè)index的分辨率,就傳入GetVideoCaptureDeviceCapability(id,?0,?capability)。

    接口對(duì)接

    以C#設(shè)計(jì)為例,接口設(shè)計(jì)如下:

    /** 獲取攝像頭數(shù)量* * pNumer: 返回設(shè)備數(shù)量* * 成功返回 NT_ERC_OK*/[DllImport(@"SmartPublisherSDK.dll")]public static extern UInt32 NT_PB_GetVideoCaptureDeviceNumber(ref Int32 pNumer);/** 返回?cái)z像頭設(shè)備信息* * device_index: 設(shè)備索引* device_name_utf8: 設(shè)備名稱,傳NULL將不返回名稱,如果不是NULL的話, device_name_length必須大于等于256, 返回utf8編碼的設(shè)備名稱* device_name_length: 設(shè)備名稱緩沖大小,如果device_name_utf8是NULL,則傳入0, 否則必須大于等于256* device_unique_id_utf8: 設(shè)備唯一ID, 傳NULL將不返回ID,如果不傳NULL的話,device_unique_id_length必須大于等于1024,返回utf8編碼的設(shè)備ID* device_unique_id_length: 設(shè)備唯一ID緩沖代銷, 如果是device_unique_id_utf8NULL, 則傳入0,否則必須大于等于1024* * 成功返回 NT_ERC_OK*/[DllImport(@"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);/** 返回?cái)z像頭能力數(shù)* * device_unique_id_utf8: 設(shè)備唯一id* capability_number: 返回的設(shè)備能力數(shù)* * 成功返回 NT_ERC_OK*/[DllImport(@"SmartPublisherSDK.dll")]public static extern UInt32 NT_PB_GetVideoCaptureDeviceCapabilityNumber([MarshalAs(UnmanagedType.LPStr)] String device_unique_id_utf8,ref Int32 capability_number);/** 返回?cái)z像頭能力* * device_unique_id_utf8: 設(shè)備唯一id* device_capability_index: 設(shè)備能力索引* capability: 設(shè)備能力* * 成功返回 NT_ERC_OK*/[DllImport(@"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);

    調(diào)用邏輯如下:

    private void FillCameraInfo(){int device_number = 0;if (NTBaseCodeDefine.NT_ERC_OK != NTSmartPublisherSDK.NT_PB_GetVideoCaptureDeviceNumber(ref device_number)){return;}if (device_number < 1){return;}cameras_.Clear();for (int i = 0; i < device_number; ++i){CameraInfo info = new CameraInfo();info.capabilities_ = new List<NT_PB_VideoCaptureCapability>();StringBuilder name = new StringBuilder(256);StringBuilder id = new StringBuilder(1024);if (NTBaseCodeDefine.NT_ERC_OK != NTSmartPublisherSDK.NT_PB_GetVideoCaptureDeviceInfo(i,name, 256,id, 1024)){continue;}info.name_ = name.ToString();info.id_ = id.ToString();int capability_number = 0;if (NTBaseCodeDefine.NT_ERC_OK != NTSmartPublisherSDK.NT_PB_GetVideoCaptureDeviceCapabilityNumber(id.ToString(), ref capability_number)){continue;}bool is_failed = false;for (int j = 0; j < capability_number; ++j){NT_PB_VideoCaptureCapability capability = new NT_PB_VideoCaptureCapability();if (NTBaseCodeDefine.NT_ERC_OK != NTSmartPublisherSDK.NT_PB_GetVideoCaptureDeviceCapability(id.ToString(), j, ref capability)){is_failed = true;break;}info.capabilities_.Add(capability);}if (!is_failed){cameras_.Add(info);}}}

    在此之前,需要設(shè)置是采集攝像頭,還是屏幕或者窗口:

    /*定義Video源選項(xiàng)*/public enum NT_PB_E_VIDEO_OPTION : uint{NT_PB_E_VIDEO_OPTION_NO_VIDEO = 0x0,NT_PB_E_VIDEO_OPTION_SCREEN = 0x1, // 采集屏幕NT_PB_E_VIDEO_OPTION_CAMERA = 0x2, // 攝像頭采集NT_PB_E_VIDEO_OPTION_LAYER = 0x3, // 視頻合并,比如桌面疊加攝像頭等NT_PB_E_VIDEO_OPTION_ENCODED_DATA = 0x4, // 已經(jīng)編碼的視頻數(shù)據(jù),目前支持H264NT_PB_E_VIDEO_OPTION_WINDOW = 0x5, // 采集窗口}

    更詳細(xì)的集成參考,參見:Windows平臺(tái)RTMP直播推送集成簡(jiǎn)要說(shuō)明_樂學(xué)吧-CSDN博客

    總結(jié)

    以上是生活随笔為你收集整理的Windows平台RTMP推送摄像头对接介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。