我正在 64 位平台和 Windows SDKv 7.1 上使用 vs2010。我为 64 位平台构建了基类并在我的项目中进行了配置。但我面临以下问题。我正在尝试连接 Logitech 910 HD 摄像头。
1>LogitechC910Interface.obj : error LNK2001: unresolved external symbol __imp_VariantClear
1>LogitechC910Interface.obj : error LNK2001: unresolved external symbol __imp_CoCreateInstance
1>LogitechC910Interface.obj : error LNK2001: unresolved external symbol __imp_CoUninitialize
1>LogitechC910Interface.obj : error LNK2001: unresolved external symbol __imp_VariantInit
1>LogitechC910Interface.obj : error LNK2001: unresolved external symbol __imp_CoInitializeEx
1>C:\PMD\windows\windows64bit\PMDSDK\examples\Release\simple.exe : fatal error LNK1120: 5 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Run Code Online (Sandbox Code Playgroud) 我在 Windows Server 2012 R2 上运行 GraphEdit,我注意到空渲染器不存在。我正在使用的其他一些 directshow 过滤器将在此服务器中运行,而空渲染器是唯一不存在的过滤器。
我已经注册了quartz.dll和qedit.dll,但仍然没有任何东西。如何在 Server 2012 上使用空渲染?
干杯。
在 Windows 10 build 10.1607.14393.10(又称周年纪念版)上,我无法再获取 MJPG 捕获流。曾经是 MJPG 和 YUY2 分辨率,现在我在 DirectShow(内核流)和 Media Foundation MJPG 中仅获得 YUY2,然后在 IBaseFilter 源连接到任何内容之前将媒体类型转换为 NV12。尝试使用不同相机的多个系统。有什么想法可能是错的吗?
640x480 @30 YUY2
...
640x480 @30 MJPG <- gone
...
DirectShow:
com_t<IAMStreamConfig> sc;
if_failed_return_result(camera_output_pin->QueryInterface(&sc));
int number_of_capabilities = 0;
int capability_size = 0;
if_failed_return(sc->GetNumberOfCapabilities(&number_of_capabilities, &capability_size), -1);
for (int i = 0; i < number_of_capabilities && k < count; i++) {
VIDEO_STREAM_CONFIG_CAPS scc;
assert(sizeof(scc) == capability_size);
AM_MEDIA_TYPE* mt = null;
if_failed_return(sc->GetStreamCaps(i, &mt, (BYTE*)&scc), -1);
...
Run Code Online (Sandbox Code Playgroud)
在MMF中:
640x480 @30 YUY2
...
640x480 @30 …Run Code Online (Sandbox Code Playgroud) webcam directshow video-capture ms-media-foundation windows-10
我正在使用 ffmpeg 在 Windows 平台上编写 AV muxer DirectShow Filter,它将视频和音频流混合到 mp4/ts/flv 文件或 rtsp/rtmp/udp 流中,我确认视频/音频流的 dts 有序增加所以不需要 dts 重新排序,所以我可以用av_write_frame()代替av_interleaved_write_frame()吗?av_write_frame()直接将数据包写入多路复用器,av_interleaved_write_frame()如果没有引用计数,则会复制数据包,所以我更喜欢使用,av_write_frame()因为我认为它应该更有效(没有复制或缓冲),我的想法正确吗?我可以使用av_write_frame()吗?
我目前有一个正确播放的DirectShow.NET图形,但我希望它能够反向播放(从最后开始并向后播放到开头).
我试过玩IMediaSeeking :: SetRate(double)方法,但这只适用于正值.当我尝试使用负值时,它会崩溃.
救命!
我正在使用.avi视频文件,但如果能够解决这个问题,我会尝试不同的格式.
我面临一个问题,其中WPF应用程序无法更新进度条甚至wpf窗口上的按钮停止发光,直到我移动窗口然后一切都很好.
每次我更新实际生成WM_PAINT消息但没有解决问题的进度条时,我都尝试调用InvalidateRect.这个问题是随机发生的,有些时候不会发生.
我的应用程序在后台使用DirectShow,增强视频渲染用于视频渲染.如果我用VMR替换增强型视频渲染器一切正常.
如果有人能帮助我,我将不胜感激.
谢谢Sohrab.
我正在编写一些代码来处理使用DirectShow从某些摄像头输入的视频,所以我必须实现ISampleGrabberCB.
我实现接口的类编译好了,但是当我尝试实例化它时,编译器会引发" error C2259: 'SampleGrabberCB' : cannot instantiate abstract class".
这是我正在实现的界面:
interface ISampleGrabberCB : public IUnknown {
virtual STDMETHODIMP SampleCB( double SampleTime, IMediaSample *pSample ) = 0;
virtual STDMETHODIMP BufferCB( double SampleTime, BYTE *pBuffer, long BufferLen ) = 0;
};
Run Code Online (Sandbox Code Playgroud)
这是我的SampleGrabberCB标题:
#pragma once
#include "stdafx.h"
class SampleGrabberCB : public ISampleGrabberCB {
private:
int _refCount;
DShowCaptureDevice* _parent;
public:
// SampleGrabberCB();
SampleGrabberCB(DShowCaptureDevice* parent);
~SampleGrabberCB();
virtual STDMETHODIMP BufferCB(double sampleTime, BYTE* pBuffer, long bufferLen);
virtual STDMETHODIMP SampleCB(double sampleTime, IMediaSample * pSample, long bufferLen); …Run Code Online (Sandbox Code Playgroud) 我只是创建一个简单的图形
SourceFilter(*.mp4 file format) ---> GDCL MPEG 4 Mux Filter ---> File writer Filter
Run Code Online (Sandbox Code Playgroud)
它工作正常.但是当源是h264文件格式时
SourceFilter( *.h264 file format) ---> GDCL MPEG 4 Mux Filter---> File writer Filter
Run Code Online (Sandbox Code Playgroud)
它录制文件,但录制的文件无法在VLC播放器,QuickTime,BS播放器,WM播放器中播放.我做错了什么?记录h264视频源的任何想法?我需要H264 Mux吗?
最好的祝愿
PS:我只想录制视频...为什么我需要多路复用?
我正在寻找一种有效的方法来从视频文件中获取图像数据.我目前正在测试FilgraphManagerClass.GetCurrentImage()从Interop.QuartzTypeLib库.这就是我需要的,但速度很慢.我需要处理每个视频的所有帧.我有什么更好的选择?
要求
int或者数组byte[]),理想情况下是RGB24或RGB32.欢迎大家提出意见.
一些代码请求:
FilgraphManagerClass graphClass = new FilgraphManagerClass();
graphClass.RenderFile(@"C:\tmp\tmp.avs");
int sz = (graphClass.Width * graphClass.Height + 10) * 4;
int[] buffer = new int[sz - 1];
Run Code Online (Sandbox Code Playgroud)
然后我逐步走过每一帧.我在循环中有这样的东西:
graphClass.GetCurrentImage(ref sz, out buffer[0]);
//DoStuff(buffer);
graphClass.CurrentPosition += graphClass.AvgTimePerFrame;
Run Code Online (Sandbox Code Playgroud) 我是DirectShow的新手,我正在寻找一种方法来渲染已经使用DirectShow.NET加载到内存中的视频.我怎样才能做到这一点?即使你给我一个亮点,我也要感恩.
directshow ×10
video ×3
c# ×2
c++ ×2
ffmpeg ×1
libavformat ×1
webcam ×1
winapi ×1
windows ×1
windows-10 ×1
wpf ×1