- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正致力于在 C# dll 中实现 directshow 功能。我的工作基于 Microsoft 随 Windows Mobile 6 sdk 提供的基于 C++ 的“CameraCapture”示例。一切进展顺利(多亏了该站点上的早期帮助),但我在尝试在 C# 领域中监听 directshow 事件时遇到了一些障碍:
我有一个循环监听 dshow 事件的线程。它基于此处定义的手动重置事件进行等待(这是在图形初始化结束时定义的:图形已构建,渲染流被调用,控制流已经阻塞数据流):
DshowRequestMan = new ManualResetEvent(false);
MediaEvent = (IMediaEvent)FilterGraph;
chk(MediaEvent.GetEventHandle(out DshowEventHandle));
DshowRequestMan.Handle = DshowEventHandle; //note: no "SafeHandle" in cf
我遇到了 2 个相关问题:
当 C++ 示例在预览模式下运行其图形时,它会获得两个 IMediaEvent:第一个 13,然后 73。之后,它停止触发,直到开始实际捕获。我的 C# 版本拉取 13,然后拉取 73,然后再次拉取 73,但出现超时错误。
简而言之,DshowRequestMan 的第三次触发似乎不应该发生,因为没有实际“获取”的 dshowevent,因此超时。
不确定我做错了什么 - 我在每次迭代中都调用“FreeEventParams()”...我怀疑 ManualResetEvent 对象使用不当,因为我只是为它的 handle 属性分配了一些东西,但是当我使用 Pinvoked“WaitForSingleObject”来收听 DshowEventHandle 时,同样的事情发生了......我在这一点上感到困惑。
任何想法将不胜感激。提前致谢!
最佳答案
这是我的过滤器图事件处理代码:
while (!_stopReceivingEvents) {
IntPtr eventHandle;
var hr = _mediaEvent.GetEventHandle(out eventHandle);
DsError.ThrowExceptionForHR(hr);
//NOTE: Do not close the event handle, because it is used internally by the filter graph
using (var safeWaitHandle = new SafeWaitHandle(eventHandle, false)) {
using (var waitHandle = new AutoResetEvent(false) {SafeWaitHandle = safeWaitHandle}) {
if (WaitHandle.WaitAll(new[] {waitHandle}, 500)) {
//receive all available events
do {
EventCode eventCode;
IntPtr param1;
IntPtr param2;
hr = _mediaEvent.GetEvent(out eventCode, out param1, out param2, 500);
_mediaEvent.FreeEventParams(eventCode, param1, param2);
if (hr == 0) {
switch (eventCode) {
//add handling code here
}
}
} while (hr == 0);
}
}
}
}
关于c# - c#紧凑框架中的Directshow : trigger handling problems for a Filtergraph's IMediaEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1066593/
编辑:最初的问题是在调用我的自定义过滤器时过滤器图停止了。我们通过在交付方法中设置样本的时间属性来解决这个问题。 我简化了图表 这适用于将视频从网络摄像头录制到文件中。 但是,如果我将过滤器放在两者之
这是导致永无止境转码的最小示例: ffmpeg -y -filter_complex movie=filename='./frames/image0.png':loop=0,trim=duration
我已经用谷歌搜索/StackOverflowing 好几天了,但无法弄明白。 我有一个 WPF 项目,我想在其中使用单独的音频系统同时在多个屏幕上播放视频。对于播放视频,我们使用 WPFMediaKi
我有一个基本的 directshow 图: Video Capture Source: SMI Grabber Dev (4ch usb dvr) > video Renderer 当我启动 Grap
我关注页面Create a mosaic out of several input videos合并视频。 当我使用 http://*.flv 视频作为输入时,它工作正常。 但是当我使用 rtmp:/
我正在用 C# 开发一个应用程序,我正在使用 DirectShow.NET 库来呈现具有多个音轨的 .AVI 文件 如何在多个音轨之间切换?我正在使用 RenderFile 构建我的过滤器图,而不是手
我正在尝试找出为什么会收到错误消息 Invalid file index 3 in filtergraph description从以下命令(忽略我为可读性而输入的换行符): ffmpeg -y -p
我正致力于在 C# dll 中实现 directshow 功能。我的工作基于 Microsoft 随 Windows Mobile 6 sdk 提供的基于 C++ 的“CameraCapture”示例
我正在开发一个严重依赖 FFMpeg 对音频文件执行各种转换的应用程序。我目前正在命令行上测试我的 FFMpeg 配置。 我正在尝试连接多个不同格式的音频文件(主要是 MP3、MP2 和 WAV)。我
我正在尝试将任意数量的视频与它们上面的一系列水印连接起来: ffmpeg -i segment0.mp4 -i segment1.mp4 -i ... segmentn.mp4 -i end.mp4
我正在使用的命令如下,使用该命令我得到 8 channel output.wav。 ffmpeg.exe -i one.wav -i two.wav -i three.wav -i four.w
我不明白为什么这不起作用..我试图获取带有 [0:v]/[0:1]/[0:v:0] 的视频流和带有 [0:a] 的音频流/[0:0]/[0:0:0]。 没有任何效果。 解释输入: 第 1.1 个输入流
我不明白为什么这不起作用..我试图获取带有 [0:v]/[0:1]/[0:v:0] 的视频流和带有 [0:a] 的音频流/[0:0]/[0:0:0]。 没有任何效果。 解释输入: 第 1.1 个输入流
我正在尝试将 django 中的两个音频文件与 连接起来ffmpeg 但收到此错误 filtergraph 描述 [0][1]concat=a=1:n=1:v=1[s0] 中的流说明符 '' 不匹配
我是一名优秀的程序员,十分优秀!