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