123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- using NAudio.CoreAudioApi;
- using NT;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using Vinno.IUS.Common.Log;
- using Vinno.vCloud.Common.FIS.Device;
- using Vinno.vCloud.Push.Configuration;
- namespace Vinno.vCloud.FIS.Windows
- {
- class DeviceService : IDeviceService
- {
- /// <summary>
- /// Gets all video devices by NTSmartPublisherSDK.
- /// </summary>
- /// <returns></returns>
- public IEnumerable<VideoDeviceInfo> GetVideoDevices()
- {
- var cameraList = new List<VideoDeviceInfo>();
- try
- {
- Logger.WriteLineInfo("Begin init video devices.....");
- var deviceNum = 0;
- var ret = Environment.Is64BitProcess
- ? NTSmartPublisherSDK_x64.NT_PB_GetVideoCaptureDeviceNumber(ref deviceNum)
- : NTSmartPublisherSDK_x86.NT_PB_GetVideoCaptureDeviceNumber(ref deviceNum);
- if (NTBaseCodeDefine.NT_ERC_OK != ret)
- {
- Logger.WriteLineError("Get video device num failed.");
- }
- for (var i = 0; i < deviceNum; i++)
- {
- StringBuilder name = new StringBuilder(256);
- StringBuilder id = new StringBuilder(1024);
- ret = Environment.Is64BitProcess
- ? NTSmartPublisherSDK_x64.NT_PB_GetVideoCaptureDeviceInfo(i, name, 256, id, 1024)
- : NTSmartPublisherSDK_x86.NT_PB_GetVideoCaptureDeviceInfo(i, name, 256, id, 1024);
- if (NTBaseCodeDefine.NT_ERC_OK != ret)
- {
- Logger.WriteLineError("Get video device info failed.");
- }
- var capabilities = new List<NT_PB_VideoCaptureCapability>();
- var capabilityNum = 0;
- ret = Environment.Is64BitProcess
- ? NTSmartPublisherSDK_x64.NT_PB_GetVideoCaptureDeviceCapabilityNumber(
- id.ToString(), ref capabilityNum)
- : NTSmartPublisherSDK_x86.NT_PB_GetVideoCaptureDeviceCapabilityNumber(
- id.ToString(), ref capabilityNum);
- if (NTBaseCodeDefine.NT_ERC_OK != ret)
- {
- continue;
- }
- for (int j = 0; j < capabilityNum; ++j)
- {
- NT_PB_VideoCaptureCapability capability = new NT_PB_VideoCaptureCapability();
- ret = Environment.Is64BitProcess
- ? NTSmartPublisherSDK_x64.NT_PB_GetVideoCaptureDeviceCapability(
- id.ToString(), j, ref capability)
- : NTSmartPublisherSDK_x86.NT_PB_GetVideoCaptureDeviceCapability(
- id.ToString(), j, ref capability);
- if (NTBaseCodeDefine.NT_ERC_OK != ret)
- {
- break;
- }
- capabilities.Add(capability);
- }
- var deviceInfo = new VideoDeviceInfo(id.ToString(), name.ToString(), capabilities);
- cameraList.Add(deviceInfo);
- }
- Logger.WriteLineInfo("End init video devices.....");
- }
- catch(Exception ex)
- {
- Logger.WriteLineError($"Get video devices error {ex}");
- }
- return cameraList;
- }
- /// <summary>
- /// Get mic device list by NTSmartPublisherSDK
- /// </summary>
- /// <returns></returns>
- public IEnumerable<AudioDeviceInfo> GetMicDevices()
- {
- var micDevices = new List<AudioDeviceInfo>();
- var enumerator = new MMDeviceEnumerator();
- try
- {
- var deviceNum = 0;
- var ret = Environment.Is64BitProcess
- ? NTSmartPublisherSDK_x64.NT_PB_GetAuidoInputDeviceNumber(ref deviceNum)
- : NTSmartPublisherSDK_x86.NT_PB_GetAuidoInputDeviceNumber(ref deviceNum);
- if (NTBaseCodeDefine.NT_ERC_OK == ret)
- {
- for (int i = 0; i < deviceNum; ++i)
- {
- var deviceNameBuffer = new byte[512];
- var name = "";
- ret = Environment.Is64BitProcess
- ? NTSmartPublisherSDK_x64.NT_PB_GetAuidoInputDeviceName((uint)i, deviceNameBuffer, 512)
- : NTSmartPublisherSDK_x86.NT_PB_GetAuidoInputDeviceName((uint)i, deviceNameBuffer, 512);
- if (NTBaseCodeDefine.NT_ERC_OK == ret)
- {
- name = Encoding.UTF8.GetString(deviceNameBuffer).Replace("\0", string.Empty);
- micDevices.Add(new AudioDeviceInfo { Name = name });
- }
- }
- }
- var mics = enumerator.EnumerateAudioEndPoints(DataFlow.Capture, DeviceState.Active);
- foreach(var mic in micDevices)
- {
- var micItem = mics.FirstOrDefault(m => m.FriendlyName.Contains(mic.Name));
- if(micItem!= null)
- {
- mic.Id = micItem.ID;
- }
- }
- }
- catch (Exception e)
- {
- Logger.WriteLineError($"Get mic device error {e}");
- }
- finally
- {
- enumerator.Dispose();
- }
- return micDevices;
- }
- /// <summary>
- /// Gets the speaker device list.
- /// </summary>
- /// <returns></returns>
- public IEnumerable<AudioDeviceInfo> GetSpeakerDevices()
- {
- var speakderDevices = new List<AudioDeviceInfo>();
- var enumerator = new MMDeviceEnumerator();
- try
- {
- var speakers = enumerator.EnumerateAudioEndPoints(DataFlow.Render, DeviceState.Active).ToList();
- speakderDevices.AddRange(speakers.Select(d => new AudioDeviceInfo { Id = d.ID, Name = d.FriendlyName }));
- }
- catch (Exception e)
- {
- Logger.WriteLineError($"Get speaker device error {e}");
- }
- finally
- {
- enumerator.Dispose();
- }
- return speakderDevices;
- }
- }
- }
|