我正在尝试使用JMF(Java媒体框架)从视频捕获设备中读取原始视频帧。
我已经成功编写了“捕获”部分 - 使用 Manager 创建的 Player 对象,我可以显示来自网络摄像头的实时视频。但是,我不知道如何创建自定义组件来访问实际的帧。这可能是因为到目前为止, Manager 已经创建了我需要的每个类实例。
我想首先编写一个显示视频的GUI组件。 (我不熟悉AWT / Swing,但是基于其他GUI框架的知识,我会说一些来自JPanel的内容,它可以在重新绘制请求或新框架可用时绘制视频。)我希望能够处理每个新帧并在x / y上循环遍历所有像素。我可以在我的设备上访问原始/ RGB格式,但是从YUV自动转换不会受到伤害。
我不知道从哪里开始。 JMF文档建议我在几个不同的地方从 Processor 或 DataSink 派生我的类。使用 Processor 接口似乎是一种过度杀伤 - 例如,我不需要播放和定时控制功能;我不知道如何首先实现它们。从 DataSink 派生似乎是一个更简单的选项,具有更少无用的抽象函数。然而,在任何一种情况下,我都完全失去了如何:
a)将组件连接到我的视频捕获数据源
b)从类
我甚至可能在这里走错路;我只想记录到目前为止我尝试过的内容。 JMF文档似乎很少,主要面向[设计]媒体播放器和转换器。
注意:Processing库似乎有一个简单的解决方案。我已经看到了一个例子:x = new Image(captureDevice.getFrame())
似乎建议像素级访问,如果不是中间类型,可以通过Image。
但我真的很想看到它在JMF中有多难。
答案 0 :(得分:1)
对不起,但在这一点上,JMF基本上已经死了。你可能会使用FX,但FX也不是很好。
答案 1 :(得分:1)
您可以试用我发布的代码here,它使用JMF和一个名为FrameGrabber的类。