
录制
很菜但努力
C++爱好者,技术控~~~
展开
-
菜鸟学ffmpeg音视频技术之11 mac采集audio
ffmpeg虽然是跨平台库,mac和windows还是有区别的,这里介绍下mac如何打开audo并采集。1.查找解码器_input_fmt = av_find_input_format("avfoundation");2.打开设备 _fmt_ctx = avformat_alloc_context(); ret = avformat_open_input(&_fmt_ctx, device_name.c_str(), _input_fmt, NUL原创 2021-01-08 15:52:17 · 658 阅读 · 1 评论 -
菜鸟学ffmpeg音视频技术之10 mac截图包含鼠标
前面介绍了mac截图和截屏,但是截出来的图片都不包含鼠标。研究发现默认跟window一样,截图都不包含鼠标,如果需要鼠标,需要自己绘制上去。下面介绍如何将鼠标绘制上去1.获取鼠标图像NSImage *overlay = [[[NSCursor arrowCursor] image] copy];2.获取鼠标位置 NSPoint mouseLoc; mouseLoc = [NSEvent mouseLocation]; //get cur int原创 2021-01-08 15:31:34 · 324 阅读 · 1 评论 -
菜鸟学ffmpeg音视频技术之9 mac截取进程图像
前面介绍了mac系统如何截取窗口和屏幕,有时我们可能想截取的是一个进程的图像。我这里采用的方法是:截取进程主窗口的图片,然后将该进程的其他独立窗口截出来,然后绘制在主窗口图片之上。这里跟windows一样,使用GDI截图只能截取直接子窗口的图片,如果子窗口是独立窗口是截不进去的需要绘制。1.获取主窗口图片//mainwindow if( 0 == _main_record_window.Handle) { std::string mainrecordname;原创 2021-01-08 14:26:46 · 253 阅读 · 0 评论 -
菜鸟学ffmpeg音视频技术之8 mac窗口截图
https://blog.youkuaiyun.com/xpg4321/article/details/112358449介绍了如何枚举mac系统的窗口。下面介绍如何截取窗口图像。1.获取窗口信息参考前一节介绍的mac枚举窗口函数获取窗口信息。 if(nullptr == _screen_caputre) break; bool b = _screen_caputre->caputreWindow(_record_wind.原创 2021-01-08 14:16:53 · 388 阅读 · 0 评论 -
菜鸟学ffmpeg音视频技术之7 mac枚举窗口
https://blog.youkuaiyun.com/xpg4321/article/details/112357480介绍了如何截屏因为录制可能需要录制窗口,这里介绍如何枚举mac屏幕的窗口。1.定义保存窗口信息的结构struct WindowPoint { int x; int y; }; struct MousePoint { WindowPoint Position; WindowPoint HotSpot; }; stru.原创 2021-01-08 14:08:34 · 414 阅读 · 0 评论 -
菜鸟学ffmpeg音视频技术之6 mac截屏
前面介绍了window 使用gdi抓取屏幕的方法,现在介绍mac系统如何进行屏幕抓取,如果您使用的qt框架,当然可以使用qt更加方便。但是qt有一个bug,mac外界扩展屏时,如果扩展屏相对位置是左上,左边,左下截图是异常的。这里介绍使用mac原生api进行截图:1.获取屏幕区域 NSScreen *screen = [[NSScreen screens] objectAtIndex:screenNumber]; CGRect mainRect; mainRect.ori原创 2021-01-08 13:55:00 · 577 阅读 · 0 评论 -
菜鸟学ffmpeg音视频技术之5 使用GDI抓取图像
本文介绍如何使用windows GDI抓取图像并将图像转化为RGB,这样可以传递给FFMPEG进行编解码。步骤如下:1.获取屏幕或者窗口句柄首先通过FindWindow找到对应窗口的HWND,桌面HWND 为NULL。录制分为屏幕录制和窗口录制,对于使用GDI抓图来讲就是获取对应对象的句柄使用GetWindowDC来获取对应的设备描述符;hdc_screen = GetWindowDC(hwnd)2.创建内存hdchdc_mem = CreateCompatibleDC(hdc原创 2020-12-18 14:01:37 · 826 阅读 · 2 评论 -
菜鸟学ffmpeg音视频技术之4 使用d3d 抓屏幕图像
本篇介绍如何使用d3d 9抓取屏幕图像,并将图像转化为RGB数据,转化后的数据可直接传递给FFmpeg进行编解码。获取桌面数据容易,转为RGB网上的例子就少了,大多只会使用D3D api保存为一个图片,本文解决了这个难题,如果你想使用D3D抓图然后使用FFMPEG进行录制会对你有所帮助。1.创建D3D对象_d3d = Direct3DCreate9(D3D_SDK_VERSION);2.获取display配置 memset(&_d3d_displaymode...原创 2020-12-11 15:43:47 · 537 阅读 · 0 评论 -
菜鸟学ffmpeg音视频技术之三实现命令录制(细节相关)
前面我使用video=screen-capture-recorder实现了录制的相关功能,这一节来讨论下我踩的坑。1.screen-capture-recorder只能录制主屏幕,如果电脑连接了扩展屏,想要录制扩展屏只能让扩展屏设置成主屏才能2.screen-capture-recorder无法设置录制的起始位置和大小,只能录制整个屏幕,想要录制某个区域只能先录制整个屏幕在使用ffmpeg命令来裁剪,这个跟组合录制一样。启动一个进程来完成即可。3.注意设备的类型,如果是dshow一定要设置d原创 2020-11-20 14:32:52 · 785 阅读 · 1 评论 -
菜鸟学ffmpeg音视频技术之二实现命令录制(暂停,组合)
前一节已经实现了录制,只能录制一段视频,实际运用中我们可能会暂停,然后接着录制最终生成一条完整的视频。我们在使用命令行操作ffmpeg时组合各段视频的命令如下:ffmpeg -f conccat -safe 0 -iconccatfile -c copy dirfile所以我的方法是暂停录制后生成一条临时视频,并把临时视频的文件名保存在conccatfile里面。重新开始录制又重新录制一条临时视频,这样如果一直反复暂停录制开始录制,会生成多个临时文件。停止录制时将这些视频组合成一条视频,从而完.原创 2020-11-20 14:13:01 · 1510 阅读 · 0 评论 -
菜鸟学ffmpeg音视频技术之一实现命令录制
ffmpeg就不解释了,太多资料了,著名的开源做音视频的库学些录制的动力是目前所在公司使用OBS录屏存在一些问题,录制窗口有些显卡会黑屏,录制屏幕会把电脑的其他软件也会录制进去,理想的录制方式是组合录制方式,把想录制的录制进去,不像录制的去掉。比如一个软件中有多个窗口,只想录制其中一些。希望后续能成功立一个flag。ffmpeg使用的方式有两种,一种是命令模式,一种是api模式,要实现我想要录制应该是api模式能实现,这里我先使用api实现录制,了解一下录制原理。为了方便依旧使用qt来实现。.原创 2020-11-16 18:17:58 · 839 阅读 · 0 评论