![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Windows
文章平均质量分 58
hcmonk
虚心好学者,各位多多指教。
展开
-
【音视频】使用ffmpeg重封装视音频文件(5-3)
最近研究了下关于视音频文件重封装功能,即remux。当然,我这里只是做了简单的remux,即将格式封装如MP4、mkv格式去除,然后将音频、视频stream的一些参数拷贝到目标format上下文中,最后从源视音频文件一帧一帧读取packet写入到目标文件中。1、初始化并启动remuxer初始化remuxerint FfmpegRemuxer::init(const char* srcFilename, const char* dstFilename){ int err = ERROR_CODE_O原创 2022-01-03 22:48:35 · 1238 阅读 · 0 评论 -
【音视频】在SDK中集成windows视音频设备热插拔功能(5-2)
上一篇实现了windows的音视频设备热插拔功能,这一篇集成到SDK中。我的对外接口类是HCMDesktopRecorder,该篇主要讲如何集成热插拔功能,其他代码忽略。1、开启并注册热插拔int HCMDesktopRecorder::init(/* 忽略 */){ /* 忽略 */ // Create thread for detect device callback m_detectDeviceThread = std::thread(std::bind(&HCMDesktop原创 2022-01-03 22:25:05 · 1557 阅读 · 0 评论 -
【音视频】实现windows视音频设备热插拔功能(5-1)
最近想完善视音频设备功能,所以研究下windows的热插拔实现。本篇主要介绍视音频设备,如摄像头、麦克风、扬声器等热插拔的代码实现。新建一个DeviceDetector类来实现热插拔功能,如下:1、开始监测设备热插拔要监测的设备GUIDstatic GUID GUID_DEVINTERFACE_LIST[] ={ // KSCATEGORY_AUDIO { 0x6994AD04, 0x93EF, 0x11D0,{ 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31原创 2022-01-03 21:54:28 · 1894 阅读 · 0 评论 -
【音视频】获取桌面程序窗口列表以及桌面、窗口的缩略图(4-4)
采集桌面、窗口,必然需要获取其列表以及缩略图。获取桌面显示器列表在《【音视频】获取视频设备-MMDeviceAPI&MONITORINFOEX(2-3)》已经讲过。本篇主要记录一下如何获取窗口列表,以及显示器、窗口的缩略图。1、获取窗口列表以及缩略图使用EnumWindows枚举所有窗口,需要实现enumWindowProc方法int VideoDevice::getApplicationDevices(std::list<VIDEO_DEVICE>& devices){原创 2021-12-11 22:47:35 · 1725 阅读 · 6 评论 -
【音视频】使用PrintWindow实现程序窗口采集(4-3)
由于使用ffmpeg gdigrab采集程序窗口效果不太好,于是又研究了一下新的窗口截图技术,该篇文章总结一下使用PrintWindow对窗口截流的心得。1、初始化采集器如果采集的窗口最小化,先将其显示出来,然后通过GetWindowRect获取窗口大小,PrintWindow可以截取窗口的全部区域(包括客户区域和标题区域)int GdiCaptor::init(const std::string& deviceId, const int fps){ int err = ERROR_COD原创 2021-12-11 21:50:37 · 1518 阅读 · 0 评论 -
【音视频】使用DXGI实现多屏幕采集(4-2)
既然使用ffmpeg gdigrab可以实现辅屏的采集,那么必须适配一下DXGI的多屏幕采集(先前实现参考《【音视频】WIN8|WIN10的桌面采集技术-DXGI(一)》)。1、修改初始化d3d函数将获取的IDXGIAdapter和IDXGIOutput保存为成员int DuplicationCaptor::initD3d(){ int err = ERROR_CODE_OK; do { err = getAdapter(&m_adapter, &m_output, m_ou原创 2021-12-11 21:26:52 · 2690 阅读 · 0 评论 -
【音视频】使用ffmpeg gdigrab采集桌面和程序窗口(4-1)
最近在研究程序窗口截流,因为之前用过ffmpeg的gdigrab,所以知道gdigrab也可以截取窗口图片,但实际上没用过。经过研究,通过将avformat_open_input中url设置为“title={程序名}"获取format context从而得到图片。1、初始化gdigrab采集器int GdigrabCaptor::init(const std::string& deviceId, const int fps){ int err = ERROR_CODE_OK; if (m_原创 2021-12-11 20:49:18 · 5173 阅读 · 2 评论 -
【音视频】使用FFMPEG读取本地|网络音视频流(3-4)
前篇:继上一篇推送网络流之后,最近又研究了一下读取网络流(顺便还有本地流)作为音视频源,此篇作为记录。一、本地|网络视频源1、初始化视频源int VStreamCaptor::init(const std::string& url, const int fps){ int err = ERROR_CODE_OK; if (m_inited) { return err; } do { m_deviceId = url; err = initStream(); if原创 2021-11-07 13:45:23 · 2265 阅读 · 0 评论 -
【音视频】使用FFMPEG进行RTSP|RTMP|HLS推流(3-3)
前言:网络上基本上没有将RTMP|RTSP|HLS推流写在一起的文章,一是RTMP、RTS这P两个服务器的搭建不一样,二是我的这几个推流代码是复用的,所以写了一篇推流合集。我在之前搭建了RTMP和RTSP服务器的基础上(参考《【音视频】RTSP服务器搭建及FFMPEG命令推流(3-1)》以及《【音视频】在windows下搭建RTMP服务器(3-2)》),使用ffmpeg编写关于rtsp|rtmp|hls推流代码。这里可以将摄像头或者桌面作为视频源,电脑麦克风或者摄像头麦克风作为音频源进行推流(之前也写过原创 2021-11-06 23:37:34 · 4599 阅读 · 1 评论 -
【音视频】在windows下搭建RTMP服务器(3-2)
最近在使用ffmpeg进行rtmp推流开发,那么必须先搭建rtmp服务器。一、搭建时需要用到的软件1、下载 nginx 1.7.11.3 Gryphon链接: http://nginx-win.ecsds.eu/download/nginx 1.7.11.3 Gryphon.zip下载完成后解压,将文件夹中的空格改为下划线,重命名为nginx_1.7.11.3_Gryphon,否则局域网内的其他电脑会发生无法访问rtmp的现象。2、下载服务器状态检查程序链接:https://github.com原创 2021-11-03 23:21:58 · 4028 阅读 · 0 评论 -
【音视频】RTSP服务器搭建及FFMPEG命令推流(3-1)
最近开始使用ffmpeg做网络推流的事情,例如rtmp、rtsp推流等。这里参考以下文章先搭建rtsp服务器实现ffmepg命令推流,之后会写代码实现推流功能。转载地址链接:https://blog.csdn.net/weixin_40448140/article/details/113180796转载 2021-11-03 21:41:37 · 1050 阅读 · 0 评论 -
【音视频】获取视频设备-MMDeviceAPI&MONITORINFOEX(2-3)
获取音频设备,包括获取摄像头、显示器设备。主要介绍获取设备列表以及默认设备。技术简介使用mmdeviceapi和MONITORINFOEX技术可以获取摄像头、显示器设备使用模块(库)使用windows的mmdeviceapi、MONITORINFOEX库主要流程和代码获取摄像头设备列表int VideoDevice::getCameraDevices(std::list<VIDEO_DEVICE>& devices){ int err = ERROR_CODE_OK;原创 2021-09-21 22:29:55 · 531 阅读 · 0 评论 -
【音视频】视频混流-avfilter(2-2)
要想将摄像头采集的视频流和桌面采集的视频流混成一股流,需要再次借助ffmpeg的avfilter功能库。技术简介借助fmpeg的filter功能,将两股视频合成一股视频流,从而实现两股视频的画中画效果使用模块(库)使用ffmpeg的avfilter库主要流程和代码1、初始化视频混流器。最需要关注的是filterDesc,即"[in0]setpts=PTS-STARTPTS,scale=%dx%d[main];[in1]setpts=PTS-STARTPTS,scale=%dx%d[over];[原创 2021-09-21 21:55:19 · 798 阅读 · 0 评论 -
【音视频】摄像头采集-dshow(2-1)
从本篇开始,作者的音视频编程之旅即将进入第二阶段,在之前采集桌面、麦克风、扬声器写成mp4|mkv等可播放文件的基础上,添加了摄像头的采集,可以将摄像头替换桌面作为视频端输入源,也可以将摄像头和桌面两股视频流混合作为一股视频输入源。技术简介采集摄像头,应该有人马上会想起dshow,是的,不过我用到了ffmpeg里面的dshow技术,ffmpeg集成了dshow使得使用更加方便了,不过要得到更详细的摄像头设备信息,还是需要使用到com知识。使用模块(库)主要使用的是ffmpeg的format、devi原创 2021-09-21 17:59:23 · 1165 阅读 · 0 评论 -
【音视频】获取音频设备-mmdeviceapi(八)
获取音频设备,包括获取麦克风、扬声器设备。主要介绍获取设备列表以及默认设备。技术简介使用ffmpeg的相关技术以及mmdeviceapi使用模块(库)使用ffmpeg的avdevice-58.dll主要流程和代码获取默认设备int AudioDevice::getDefaultDevice(bool isMic, std::string& id, std::string& name){ HELPER::ComUtil comUtil; int err = ERROR_C原创 2021-04-11 22:12:59 · 947 阅读 · 0 评论 -
【音视频】保存同步的音视频文件-ffmpeg(九)
如何将两股音频和视频合成一个视音同步的可播放的文件呢?本文中用到了ffmpeg的写文件技术。原创 2021-04-11 16:40:00 · 505 阅读 · 0 评论 -
【音视频】音频编码-aac(七)
本文介绍音频编码,使用了ffmpeg在音频编码器实现aac的编码。技术简介使用ffmpeg的编码器使用模块(库)使用ffmpeg的avcodec-58.dll主要流程和代码1、初始化音频编码器int AacEncoder::init(AVSampleFormat format, int samplerate, int bitrate, int channels){ int err = ERROR_CODE_OK; if (m_inited) { return err; } d原创 2021-04-05 20:46:47 · 1088 阅读 · 0 评论 -
【音视频】音频混流-avfilter(六)
要实现两股音频混流功能,需要用到ffmpeg的filter库,它可以自定义过滤器并实现两股甚至多股音频的融合。技术简介使用ffmpeg的filter功能实现使用模块(库)使用ffmpeg的avfilter-7.dll主要流程和代码1、初始化音频混合器int AudioMixer::init(const AUDIO_FILTER_CTX& outCtx, const AUDIO_FILTER_CTX* inCtx0, const AUDIO_FILTER_CTX* inCtx1){原创 2021-04-05 20:33:47 · 475 阅读 · 0 评论 -
【音视频】音频重采样-avfilter(五)
本篇介绍音频重采样技术,音频重采样其实跟视频转码有异曲同工之妙,可以理解为将源pcm转码为目标pcm供编码器编码使用,因为有时候只需要采样率很低的音频。技术简介使用ffmpeg的filter功能实现使用模块(库)使用ffmpeg的avfilter-7.dll主要流程和代码1、初始化重采样器int AudioResampler::init(const AUDIO_FILTER_CTX& outCtx, const AUDIO_FILTER_CTX* inCtx0, const AUDIO原创 2021-04-05 20:04:04 · 543 阅读 · 0 评论 -
【音视频】音频采集-WASAPI(四)
本篇主要介绍音频的采集技术,使用的是WASAPI技术。技术简介WASAPI全称是Windows Audio Session API(Windows音频会话API),是从Windows Vista之后引入的UAA(Universal Audio Architecture)音频架构所属的API。主要流程和代码1、初始化采集器int WasapiCaptor::init(bool isMic, const std::string& deviceId, const std::string&原创 2021-04-05 19:38:37 · 2000 阅读 · 1 评论 -
【音视频】视频编码-H264(三)
本篇主要介绍视频编码,将转码之后的YUV420像素数据编码为H264裸数据。技术简介使用ffmpeg的编码器使用模块(库)使用ffmpeg的avcodec-58.dll主要流程和代码1、初始化编码器int H264Encoder::init(int width, int height, int framerate, int bitrate, int qb, int gopTime){ int err = ERROR_CODE_OK; if (m_inited) { return e原创 2021-04-05 17:43:28 · 231 阅读 · 0 评论 -
【音视频】视频转码-SWS(二)
继桌面采集之后的第二篇关于音视频的文章,本篇主要实现视频的转码,将采集的BRGA转码为YUV420。技术简介使用ffmpeg sws实现转码。使用模块(库)ffmpeg的swscale-5.dll主要流程和代码1、初始化转码器int FfmpegSwsTranscoder::init(AVPixelFormat srcFmt, int srcWidth, int srcHeight, AVPixelFormat dstFmt, int dstWidth, int dstHeight){ i原创 2021-04-05 16:13:52 · 282 阅读 · 0 评论 -
【音视频】WIN8|WIN10的桌面采集技术-DXGI(一)
WIN8|WIN10的桌面采集技术-DXGI目录技术简介使用模块(库)主要流程和代码本篇文章是本人音视频技术文章集中的开篇,之后会持续更新创作更多关于音视频的文章。望有大佬可以交流、指点。文章主要表现形式是以实现为主,扩展知识为辅,所以一般比较长,不过也有更多实现细节以供参考。目录技术简介DXGI(Microsoft DirectX Graphics Infrastructure)是微软提供的一种可以在win8及以上系统使用的图形设备接口。它负责枚举图形适配器、枚举显示模式、选择缓冲区格式、在进程原创 2021-01-10 21:59:07 · 2816 阅读 · 3 评论