当前位置: 首页 > news >正文

制定网站建设方案/seo 工具

制定网站建设方案,seo 工具,公众号运营平台,凡科怎么做网站需求 在安防行业应用中,除了在本地看到摄像机的视频和进行音频监听外,还有一个重要的功能,那就是对讲. EasyPlayerPro-win为了减轻二次开发者的工作量,将本地音频采集也进行了集成; 功能特点 支持获取本地所有音频输入…

需求

在安防行业应用中,除了在本地看到摄像机的视频和进行音频监听外,还有一个重要的功能,那就是对讲. EasyPlayerPro-win为了减轻二次开发者的工作量,将本地音频采集也进行了集成;

功能特点

  • 支持获取本地所有音频输入设备列表;
  • 可任意选择任一音频输入设备;
  • 可设置采样率和采样精度及位率;
  • 可设置编码格式(当前支持G711A,G711U,AAC);

EasyPlayerPro播放器

实现流程

  1. 采用DirectSound8进行本地音频采集;
  2. 将采集到的音频数据写入编码队列;
  3. 在编码线程中获取源始音频数据,进行音频编码;
  4. 编码完成后,将编码数据回调给上层应用;
    //获取声音采集设备列表int     GetAudioCaptureDeviceList(int *num, SOUND_CAPTURE_DEVICE_INFO **pDeviceInfo);int     OpenAudioCaptureDevice(int captureDeviceIndex);int     GetSupportWaveFormatList(int *num, WAVEFORMATEX **ppWaveFormatEx);int     StartCapture(int waveFormatExIndex, DirectSoundCaptureCallback callback, void *userptr);int     StopCapture();void    CloseAudioCaptureDevice();static LPTHREAD_START_ROUTINE __stdcall _lpDirectSoundCaptureThread ( LPVOID _pParam );

代码实现

    //开始采集音频int     DirectSoundCapturer::StartCapture(int waveFormatExIndex, DirectSoundCaptureCallback callback, void *userptr){if (NULL == pSoundCaptureThread)        return -1;if (NULL == pSoundCaptureThread->pSupportWaveFormatEx)      return -1;if (waveFormatExIndex< 0 || waveFormatExIndex>=pSoundCaptureThread->supportWaveFormatExCount)   return -2;HRESULT hr = S_OK;WAVEFORMATEX *_wfxInput = (WAVEFORMATEX*)&pSoundCaptureThread->pSupportWaveFormatEx[waveFormatExIndex];memcpy(&pSoundCaptureThread->inWaveFormatEx, _wfxInput, sizeof(WAVEFORMATEX));DSCBUFFERDESC   dscbd;ZeroMemory( &dscbd, sizeof(DSCBUFFERDESC) );pSoundCaptureThread->dwNotifySize  = max( 1024, _wfxInput->nAvgBytesPerSec / 8 );pSoundCaptureThread->dwNotifySize -= pSoundCaptureThread->dwNotifySize % _wfxInput->nBlockAlign;pSoundCaptureThread->dwCaptureBufferSize = pSoundCaptureThread->dwNotifySize * 16;dscbd.dwSize        = sizeof(DSCBUFFERDESC);dscbd.dwBufferBytes = pSoundCaptureThread->dwCaptureBufferSize;dscbd.lpwfxFormat   = _wfxInput;hr = pSoundCaptureThread->lpDirectSoundCapture8->CreateCaptureBuffer( &dscbd, &pSoundCaptureThread->lpDSBCapture, NULL);if (FAILED(hr))                                 return -3;if (NULL == pSoundCaptureThread->lpDSBCapture)  return -4;pSoundCaptureThread->dwNextCaptureOffset = 0;hr = pSoundCaptureThread->lpDSBCapture->QueryInterface( IID_IDirectSoundNotify, (PVOID*)&pSoundCaptureThread->lpDSNotify );for( INT i = 0; i < 16; i++ ) {pSoundCaptureThread->DSBPosNotify[i].dwOffset     = (pSoundCaptureThread->dwNotifySize * i) + pSoundCaptureThread->dwNotifySize - 1;pSoundCaptureThread->DSBPosNotify[i].hEventNotify = pSoundCaptureThread->hCaptureNotifyEvent;}hr = pSoundCaptureThread->lpDSNotify->SetNotificationPositions( 16, pSoundCaptureThread->DSBPosNotify);hr = pSoundCaptureThread->lpDSBCapture->Start( DSCBSTART_LOOPING );//m_fIsCapture = TRUE;if (SUCCEEDED(hr)){if (NULL == pSoundCaptureThread->hCaptureNotifyThread){pSoundCaptureThread->flag = 0x01;pSoundCaptureThread->userPtr = this;pSoundCaptureThread->captureCallback = callback;pSoundCaptureThread->callbackUserPtr = userptr;pSoundCaptureThread->hCaptureNotifyThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)_lpDirectSoundCaptureThread, pSoundCaptureThread, 0, NULL);while (pSoundCaptureThread->flag!=0x02 && pSoundCaptureThread->flag!=0x00)  {Sleep(100);}}}return hr;}//获取源始音频数据int DirectSoundCapturer::ProcessCaptureData(){HRESULT hrRet = 0;LONG    lLockSize;if (NULL == pSoundCaptureThread)            return -1;if (pSoundCaptureThread->flag == 0x03)      return -1;if (NULL == pSoundCaptureThread->lpDSBCapture)  return -1;do {DWORD   dwCapturePos, dwReadPos;hrRet = pSoundCaptureThread->lpDSBCapture->GetCurrentPosition( &dwCapturePos, &dwReadPos );lLockSize = dwReadPos - pSoundCaptureThread->dwNextCaptureOffset;if( lLockSize < 0 ) lLockSize += pSoundCaptureThread->dwCaptureBufferSize;// Block align lock size so that we are always write on a boundarylLockSize -= (lLockSize % pSoundCaptureThread->dwNotifySize);if( lLockSize == 0 ) {hrRet = -1;break;}PVOID   pCapturedData[2]   = {NULL, NULL};DWORD   dwCaptureLength[2] = {0, 0};// Lock the capture buffer downhrRet = pSoundCaptureThread->lpDSBCapture->Lock( pSoundCaptureThread->dwNextCaptureOffset,lLockSize, &pCapturedData[0],&dwCaptureLength[0],&pCapturedData[1],&dwCaptureLength[1], 0L );if( FAILED( hrRet ) ) {hrRet = -2;break;}if (NULL != pSoundCaptureThread->captureCallback){pSoundCaptureThread->captureCallback(&pSoundCaptureThread->inWaveFormatEx, pSoundCaptureThread->callbackUserPtr,(unsigned char *)pCapturedData[0], (int)dwCaptureLength[0], (unsigned char *)pCapturedData[1], (int)dwCaptureLength[1]);}pSoundCaptureThread->dwNextCaptureOffset += dwCaptureLength[0];pSoundCaptureThread->dwNextCaptureOffset %= pSoundCaptureThread->dwCaptureBufferSize;       // Circular bufferif( pCapturedData[1] != NULL ) {pSoundCaptureThread->dwNextCaptureOffset += dwCaptureLength[1];pSoundCaptureThread->dwNextCaptureOffset %= pSoundCaptureThread->dwCaptureBufferSize; // Circular buffer}pSoundCaptureThread->lpDSBCapture->Unlock( pCapturedData[0], dwCaptureLength[0],pCapturedData[1], dwCaptureLength[1] );} while(0);return hrRet;}

关于EasyPlayerPro播放器

EasyPlayerPro是一款全功能的流媒体播放器,支持RTSP、RTMP、HTTP、HLS、UDP、RTP、File等多种流媒体协议播放、支持本地文件播放,支持本地抓拍、本地录像、播放旋转、多屏播放、倍数播放等多种功能特性,核心基于ffmpeg,稳定、高效、可靠、可控,支持Windows、Android、iOS三个平台,目前在多家教育、安防、行业型公司,都得到的应用,广受好评!

EasyPlayerPro:https://github.com/EasyDSS/EasyPlayerPro

点击链接加入群【EasyPlayer & EasyPlayerPro】:544917793

技术支持

  • 邮件:support@easydarwin.org

  • QQ交流群:544917793

获取更多信息

EasyDarwin开源流媒体服务器:www.EasyDarwin.org

EasyDSS商用流媒体解决方案:www.EasyDSS.com

EasyNVR无插件直播方案:www.EasyNVR.com

Copyright © EasyDarwin Team 2012-2017

EasyDarwin

转载于:https://www.cnblogs.com/babosa/p/8206958.html

http://www.lbrq.cn/news/960427.html

相关文章:

  • 网站优化工作室/网站宣传文案
  • 官方门户网站j建设的必要性/广告公司名字
  • 网站建立供应商/网络营销推广的方法
  • pos机网站模板/太原做网络推广的公司
  • 富士康/百度刷排名seo
  • 求国外做任务赚钱的网站/网络营销公司名字
  • 如何安装wordpress的插件安装/郑州谷歌优化外包
  • 有人在相亲网站骗人做传销/seo客服
  • 网页制作三剑客是指/seo网络排名优化哪家好
  • 特色个人网站/百度一下官方网址
  • 长沙移动网站建设哪家好/百度网络营销app
  • 网站建设主要用什么软件/如何注册百度账号
  • 怎样建设网站客服服务/上海网站关键词排名
  • 重庆奉节网站建设/网上推广用什么平台推广最好
  • 网站建设制作软件/网站推广的方法和途径
  • 做跨境电商被骗了三万/seo顾问是什么职业
  • 购物商城网站开发目的文档/市场营销策略
  • 洛阳做网站的公司/东莞做网站公司电话
  • 网站备案多久做一次/网络营销试卷
  • 黄石建委网工程建设城建网站/网站关键词怎么优化排名
  • 网址导航系统/网站seo优化公司
  • jquery 单击input输入框弹出选择框多用于人才类网站/今日头条指数查询
  • 宝安网站建设哪家便宜/seo优化是怎么优化的
  • 做网站怎么弄/网络营销的种类有哪些
  • 可做宣传的网站都有哪些/跨界营销案例
  • 南京做网站开发 待遇/邢台市seo服务
  • 小组网站建设方案书/自己如何制作网站
  • 景区网站建设材料/电脑系统优化工具
  • 做收费网站/太原推广团队
  • 做网站公司法人还要拍照吗/外包网站有哪些
  • DTW算法解决时序问题的解析实践
  • 深入解析文本分类技术全景:从特征提取到深度学习架构
  • Excel批量生成SQL语句 Excel批量生成SQL脚本 Excel拼接sql
  • JAVA面试宝典 -《Kafka 高吞吐量架构实战:原理解析与性能优化全攻略》
  • AllDup(重复文件查找)v4.5.70 便携版
  • CrewAI与LangGraph:下一代智能体编排平台深度测评