像素修改代码在主程序中运行很快,在Delphi 6 DirectShow过滤器中非常慢,还有其他问题
我有一个Delphi 6应用程序,该应用程序可实时将位图发送到直接滚动DLL,每秒25帧. DirectShow dll也是我的代码,也使用Dspack DirectShow组件套件在Delphi 6中编写.我有一个简单的代码块,可以通过位图中的每个像素修改图像的亮度和对比度,如果设置了某个标志,否则将位图推出了DirectShow dll dll dll未修改(推源视频过滤器).代码曾经在主应用程序中,然后我将其移至DirectShow DLL中.当它在主要应用程序中时,它运行良好.我可以按预期看到位图的变化.但是,现在代码位于DirectShow dll中,它有以下问题: 当下面的代码块处于活动状态时,DirectShow DLL确实很慢.我有一个四核i5,这真的很慢.我还可以看到CPU消费量很大.相比之下,在主应用程序中运行的相同代码在旧的单核P4 上运行良好.它确实在那台旧机器上明显触及了CPU,但是视频很顺畅,没有问题.图像只有352 x 288像素. 我看不到可见
0 2023-05-24
编程技术问答社区
在PDF文件中直接打印网页
在我的网站中,我使用PHP获取我的MySQL数据.当我单击PDF打印按钮时,我希望在PDF文件中打开该数据? 解决方案 首先,如果您想做高质量的专业产品.您想要如果您正在寻找某种开源工具来实现类似的东西.您可以查看如此问题. 其他解决方案 您可以准备静态PDF表单文件,只需使用php的 fdf模块. 其他解决方案 这取决于您正在使用的平台.如果您在圣杯上使用Groovy,这将是一项简单的工作.有一些插件可以促进PDF报告,例如Jasper-Plugin. 路易斯
0 2023-05-22
编程技术问答社区
如何使用AMMediaType进行视频过滤
我正在使用视频resizer dsp 视频Resizer DSP 调整我的视频大小. 我与Lazarus Free Pascal和Dspack一起工作. 本网站说明如何使用: http://alax.info/blog/1371 P> cocreateinstance DSP作为DMO,并将其添加到DMO包装器过滤器 使用iwmresizerprops :: setfullcropregion初始化dsp 连接输入引脚 通过ImediaObject :: SetOutputType 设置输出类型 igraphbuilder ::连接导向输出销 我写这篇文章: //Create Resizer DMO hr := CoCreateInstance(CLSID_DMOWrapperFilter, NIL, CLSCTX_ALL, IID_IBaseFilter, FResizerDMO); if FAILED(hr) then EXIT; //CLSID_CVid
12 2023-05-20
编程技术问答社区
在多台机器上并行使用DirectShow编辑服务?
是否以任何可能的方式处理至少1 任何语言?在任何程序的帮助下? 解决方案 简短的答案是肯定的,但这不是一个非常实用的解决方案 假设您确实设法创建了一个系统,该系统跨机器跨机器打破了视频以进行分发解码.首先,您必须谨慎对待视频的"分解".您必须始终从密钥帧开始,然后在下一个密钥帧之前结束.接下来,您必须解码剪辑.解码后,必须将解码的数据传输到呈现视频的计算机.未压缩的1080p @ 30 fps流是〜182兆字节/s,这不仅是千兆位连接可以处理的. 您最好对多个内核和GPU进行解码.
4 2023-05-19
编程技术问答社区
在摄像机预览流上绘制一个矩形(或直线,或位图)(.NET Compact Framework)。
我正在处理使用相机,显示预览并允许用户拍照的.NET CF 2.0应用程序.我正在使用cameracpaptredialog组件,我想在预览屏幕上绘制矩形,但我无法做到……有什么想法吗? 您认为DirectShow中的覆盖式混音器过滤器是否有用?如果是这样,您有什么例子吗? (问题是我在CF 2.0上工作,因此在这里正常框架可以正常工作的许多解决方案不起作用...). 预先感谢, giacomo 解决方案 您需要查找显示VMR混音器位图功能的样本,并与自定义覆盖的视频混合 绘制带有文字的视频,上面
2 2023-05-15
编程技术问答社区
如何在windows下用ffmpeg抓取笔记本网络摄像头视频
我有一个小型Python程序,可以使用带有FFMPEG的子过程来捕获Linux的网络摄像头(至少适用于具有内置网络摄像头的笔记本电脑)的简短视频. 现在,我正在尝试编写相同的程序来捕获Windows中的网络摄像头,而且我知道我不能使用Linux中很好地工作的通用"/dev/video0",但我认为像命名它一样"集成的相机"应该足够,但失败了. 这是我的Linux代码(可行): import sys from subprocess import call from datetime import datetime def record_webcam(seconds): cam = '/dev/video0' timestamp = datetime.now().strftime('%Y%m%d-%H%M%S') filename = timestamp + 'something.mkv' #g
4 2023-05-10
编程技术问答社区
ISampleGrabber::BufferCB到IplImage;在OpenCV中显示乱码的图像-C++
我正在使用DirectShow访问视频流,然后使用SampleGrabber过滤器和接口从每个帧中获取样品以进行进一步的图像处理.我正在使用回调,因此在每个新帧后都会被调用.我基本上只是从PlayCap示例应用程序中工作,并在图中添加了样本过滤器. 我遇到的问题是我正在尝试在其他OpenCV窗口上显示抢劫的样品.但是,当我尝试将信息投入缓冲区至iPlimage时,我会得到一堆像素的混乱. BufferCb调用的代码不在下面,没有任何适当的错误处理: STDMETHODIMP BufferCB(double Time, BYTE *pBuffer, long BufferLen) { AM_MEDIA_TYPE type; g_pGrabber->GetConnectedMediaType(&type); VIDEOINFOHEADER *pVih = (VIDEOINFOHEADER *)type.pbFormat; BITMAPINFO*
2 2023-05-10
编程技术问答社区
使用DirectShow捕捉帧,OpenCV进行处理
我为视频到图像捕获做出了两种不同的解决方案,并想知道我是否可以将两全其美的最好的解决方案交织在一起.我目前正在使用DirectShow加载AVI文件并捕获图像.但是,DirectShow缺乏图像处理功能以及进行其他过滤器的需求使我在轨道上死了. 然后我转向OpenCV. 它具有我需要的所有图像处理函数,但是在直接节目解决方案能够检索的视频中加载很难.在线上有有关此过程或与之接近的任何教程吗?感谢您的建议. 解决方案 是的,这是一篇文章的链接: http://opencv.willowgarage.com/wiki/directshow
2 2023-05-10
编程技术问答社区
从火线抓取视频流
我正在尝试通过Firewire将视频(Sony HVR-Z1E)传输到我的计算机.传入的图片/流应通过某些期望CVMAT格式(来自OPENCV)的功能进一步处理. 好吧,我的问题是我不知道如何抓住流. OK OPENCV 2.1为我提供了一些方法(CVCaptureFromCam),但是无论我给他哪个参数,它总是从笔记本电脑的网络摄像头而不是从Firewire获取流.我听说我需要在DirectShow API(使用Windows SDK)中切换主凸轮.但是我实际上也不知道该怎么做. 所以有什么建议如何做? 解决方案 请参阅我的相关答案在这里. OpenCV本地无法从Firewire摄像机中捕获视频.您要么需要使用CMU1394驱动程序,要么需要使用Sony驱动程序(如果可以使用SDK)来捕获该相机的视频,然后将其传递给OpenCV. 其他解决方案 几年前,我使用DirectShow做了这样的事情.主要限制是事实,该图像通过DShow获得的图像是标准的PAL分辨率.高清图像
0 2023-05-09
编程技术问答社区
用openCV读取视频
我有一个视频 Engine2.avi 我想阅读和显示OpenCV.这是我的代码: #include #include #include using namespace cv; int main(int argc, char** argv) { string filename = "D:\\BMDvideos\\engine2.avi"; VideoCapture capture(filename); Mat frame; if( !capture.isOpened() ) throw "Error when reading steam_avi"; namedWindow("w", 1); for( ; ; ) { capture >> frame;
2 2023-05-09
编程技术问答社区
DirectShow中的实时视频编码
我已经开发了一个Windows应用程序,该应用程序使用DirectShow从外部设备捕获视频.图像分辨率为640x480,而没有压缩的视频尺寸很大(约27MB每秒). 我的目标是尽可能降低此尺寸,因此我正在寻找一个编码器,这将使我可以实时压缩视频.可能是H.264,MPEG-2或其他任何东西.它必须允许我将视频保存到磁盘上,如果我还可以通过网络实时流式传输磁盘(Wi-Fi,因此大小应大约为每秒1MB或更少).重大质量损失将是不可接受的. 我发现,为此任务获得适当的直接滤波器非常困难.可以假定客户端机器是合理的现代(快速2核CPU),并且可以使用CUDA/OPENCL.有一些应用程序允许使用CUDA编码视频并提供良好的性能,但是我没有找到适当的DirectShow过滤器或可用于开发一个的API. nvidia nvcuvenc.dll似乎具有私有API,因此我无法直接使用它.我发现的任何基于CPU的编码器都无法满足我的要求,但也许我错过了一些. 任何人都可以向我推荐一个解
2 2023-05-09
编程技术问答社区
如何让DirectShow播放资源中的视频?
我正在扩展一个应用程序,以在对话框中的控件上播放几个视频之一.从无窗的示例开始,尽管视频必须与主要可执行文件单独的文件. 从包装的角度来看,理想的情况是将视频包含在可执行文件中.我为此做了一些谷歌搜索,并且有很多"有人应该这样做",还有几个指针是异步样本,尽管尚不清楚如何从那里到达我想要的地方. 有人知道这样做的简单方法吗?似乎这不是一个角案,我有点惊讶这不在框中. 解决方案 寻找 异步过滤样品 在DirectShow SDK中,它具有称为cmemstream的内容,可以从内存中流数据(读取:媒体). 其他解决方案 为什么不从EXE/DLL中提取视频并将其存储在温度路径中?然后播放临时文件.
0 2023-04-20
编程技术问答社区
找到一个过滤器'的DirectShow类别
给出了过滤器,硬件设备或其绰号,如何找出过滤器或硬件设备属于的直接藏书类别?属性包中某处是否有某种"类别"属性? 解决方案 DirectShow类别包含过滤器注册信息,该信息可以从注册条目中创建监视器.一旦创建了绰号,您还没有过滤器,但是此时类别信息已经消失.从绰号创建过滤器的实例显然不会使您退回类别. 也可以将一个过滤器分为多个类别,并且也可以将[第三方]过滤器注册为一个类别,而无需过滤器. 所以,不,当您有过滤器时,您无法找到过滤器的类别.有时,您可以从实例上获得CLSID并通过枚举类别来匹配它,但即使对于每个过滤器都不起作用.
6 2023-04-14
编程技术问答社区
FFMPEG中缺少DirectShow过滤器
我正在尝试通过FFMPEG从Windows 10流式传输系统音频,但是当我运行ffmpeg -list_devices true -f dshow -i dummy 时,我的内置音频输出设备(Realtek)不会显示 但是Realtek音频设备可以正常工作,并且还显示在Graph Studio Next中注册,直接显示设备浏览器: OS:Windows 10,64位 FFMPEG:4.3.2(最新) 有什么想法? 解决方案 您需要启用Loopback设备.它通常以"立体混音"开头. 转到控制面板 - >声音 - >录制.右键单击并确保显示所有设备.启用"立体声混合".
14 2023-04-14
编程技术问答社区
4K MJPEG相机视频预览,有延迟(在Windows 10上)。
我正在尝试在我的应用程序中从4K摄像头(BRIO)预览视频流.该应用程序使用DirectShow打开相机并接收帧.过滤器配置如下图所示. 问题是高分辨率(即4096x2160).使用4096x2160分辨率,当我预览视频流时,GraphEdit和我的应用程序都会延迟. 我正在Windows 10上进行测试.请注意,Windows 10预装的相机应用程序可与此分辨率完美.我还使用MediaCapture API在UWP示例中尝试了相同的操作,但是问题是相同的. 我缺少什么? 解决方案 Windows 10预装的相机应用程序不使用DirectShow,使用了基于Media Foundation API的完全不同的代码路径,总体而言,尤其是JPEG减压效率更高.也就是说,您无法将基于直接节目的图形直接比较Windows Store Camera应用程序. 在您的情况下>是与此分辨率不兼容的过时的软件,并且是瓶颈.还需要具有 . 表演明智的明智,我建议在媒体基金会
16 2023-04-14
编程技术问答社区
如果 DirectShow 渲染器的输入引脚不支持 IAMBufferNegotiation,如何改变它的缓冲区大小?
我有Delphi 6中编写的DirectShow应用程序.我想将渲染器的缓冲区大小从当前的500 ms值减少到较小的东西.问题是,其输入引脚不支持Iambuffernegotiation,这很奇怪,因为渲染器是我VoIP手机上的耳朵,显然需要较小的缓冲尺寸以避免在电话中延迟不愉快. 我尝试了将VoIP手机的捕获过滤器(麦克风)连接到渲染器(EAR片)的图表编辑中的环回测试.我知道缓冲区的大小为500毫秒,因为这是渲染器属性的图表编辑显示的内容.但是,当我在Skype呼叫中使用VoIP手机时,延迟要短得多,我期望的是50-100毫秒. 因此,Skype知道如何更改渲染器的默认缓冲区大小.我该如何做同样的技巧? 解决方案 输出引脚通常负责设置分配器,并且IAMBufferNegotiation通常在输出引脚上可用.您只想在Capture Filter的输出引脚处降低缓冲区尺寸,并且它将生成小型缓冲区,这些缓冲区将通过该图传播,仍然是小型缓冲区和小块数据,因此不需要减少中间
12 2023-04-14
编程技术问答社区
GMFBridge DirectShow滤波器SetLiveTiming效果
我正在使用优秀 gmfbridge directshow fillers 非常效果,让我关闭视频录制图并打开一个新的录制图,没有数据损失. 我的原始源图是从标准视频和音频输入中捕获实时视频. GMFBridgeController滤波器上有一个无证件的方法,名为SetLiveTiming().从名称来看,我认为如果我们从A live 图(不是从文件中)捕获的,则应将其设置为true.我将此值设置为true,一切都按预期工作 相同的捕获硬件使我能够捕获实时电视信号(在我的情况下为ATSC),因此我使用BDA架构过滤器创建了该图的新版本,以调整目的.一旦数据从MPEG Demuxer流出,该图的其余部分几乎与我的原始图相同. 然而,在此操作上,我的muxing图(在桥的另一侧)不起作用.数据从BridgeSource过滤器(视频和音频)流过,并达到了MP4 Muxer滤波器,但是 没有来自muxer输出馈送A FileWriter过滤器的数据. 几个小时后,我将
18 2023-04-14
编程技术问答社区
读取USB摄像头的输入编辑并将输出发送到Windows上的虚拟摄像头。
我正在研究项目,我需要阅读USB摄像机的输入,对其进行一些影响,然后将该数据发送到虚拟摄像机,以便可以通过Skype等访问. . 我已经编译并使用了 vcam filter .我还能够对FillBuffer方法进行一些更改.我现在需要知道可以从另一个应用程序将数据发送到VCAM过滤器,或者我需要编写另一个过滤器. 解决方案 您当前作为模板的VCAM项目是其他视频消费应用程序(例如Skype)的接口,那些使用DirectShow API访问视频捕获设备并与您的过滤器中的平台/位匹配. 您有责任开发其余所谓的过滤器:您要么直接访问过滤器中的真实设备(大大简化了任务,这是您填充FillBuffer的内容,即从另一个来源生成视频的代码) ,或者您要实现分解通信,以便FillBuffer实现可以从另一个应用程序传输数据. Nethier VCAM或任何标准DRIECTSHOW样本提供涵盖分解通信的功能,您可能还需要处理其他并发症:一个应用程序和多个过滤器以消费视频,平台
12 2023-04-14
编程技术问答社区
在Windows上捕获和显示实时摄像机内容
我正在开发一个Windows应用程序,该应用程序能够显示高质量的视频供稿,记录下来或从中拍摄照片,并以后将其编辑(最多4K,在不久的将来可能是8K). 我目前有使用WPF(C#)的工作产品.为了捕获和显示视频,我使用了aforge.net库. 我的问题是该应用程序真的很慢,主要性能来自视频渲染.显然,这样做的唯一方法是从Aforge库中进行回调,每次可用时都会提供一个新的框架.然后将该框架作为图像放置在Image元素中.我相信您可以看到性能的来源,尤其是对于高分辨率图像. 我在WPF和这些庞大的图书馆方面的经验使我重新考虑了我想如何编程;我不想制作不好的软件,从而占用每个人的时间(我是指手工网络),以获取有关"为什么?"的更多信息. 问题是,摄像机捕获和显示在WPF C#中是地狱,但是我似乎在其他任何地方都没有更好的选择(在Windows上,就是).一个选择是我主要使用C ++和DirectShow.这是一个很好的解决方案,但在性能方面感觉过时,并且建立在Microso
4 2023-04-14
编程技术问答社区