Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java:如何逐帧读取RTSP流_Java_Rtsp Client - Fatal编程技术网

java:如何逐帧读取RTSP流

java:如何逐帧读取RTSP流,java,rtsp-client,Java,Rtsp Client,出于性能原因,我放弃了Python Opnecv/FFmpeg解决方案,转而使用Java 但令我惊讶的是,我找不到任何比Python更好、更完整的解决方案。我尝试使用vlcj,但它再次提供了更多类似于命令行的界面。我找不到任何回调机制来读取和分析所有帧 我还尝试使用Java套接字,但除了通过RTSP与Ip摄像头建立连接之外,我什么都做不了 注意:它将在服务器环境中运行,因此我们不想显示任何帧,我们只需要在帧上运行某些其他操作 请告诉我正确的方向。如果您想在媒体播放时访问视频帧缓冲区,您有两个选择

出于性能原因,我放弃了Python Opnecv/FFmpeg解决方案,转而使用Java

但令我惊讶的是,我找不到任何比Python更好、更完整的解决方案。我尝试使用vlcj,但它再次提供了更多类似于命令行的界面。我找不到任何回调机制来读取和分析所有帧

我还尝试使用Java套接字,但除了通过RTSP与Ip摄像头建立连接之外,我什么都做不了

注意:它将在服务器环境中运行,因此我们不想显示任何帧,我们只需要在帧上运行某些其他操作


请告诉我正确的方向。

如果您想在媒体播放时访问视频帧缓冲区,您有两个选择

我假设您使用的是vlcj 4.x+,这在撰写本文时是最新版本

首先,您可以将
EmbeddedMediaPlayer
CallbackVideoSurface
一起使用

您可以使用
MediaPlayerFactory
创建视频界面

创建视频表面时,需要提供
RenderCallback
实现

正常创建嵌入式媒体播放器,并调用
mediaPlayer.setVideoSurface()
设置视频表面

VLC将使用原始视频帧数据以
ByteBuffer
的形式调用该渲染回调实现类,该视频帧数据由本机内存支持。然后,您可以在此字节缓冲区中对数据进行分析

第二种方法是查看
CallbackMediaPlayerComponent
类-该类旨在让您非常容易地获得现成的工作媒体播放器,并提供一种只插入您想要定制的位的方法。在本例中,插入渲染回调实现以进行分析

github项目页面上的vlcj源代码中有一些示例显示了所有这些。其中一个示例处理此缓冲区以将视频动态转换为灰度,但显然,您可以对帧数据执行任何操作

该方法名为“onDisplay()”,但如果您只对执行某些分析感兴趣,则不必在任何地方实际显示视频


如果您想访问视频帧数据,这就是vlcj可以提供的范围。

vlcj根本不是“更像是一个命令行界面”,我甚至不知道这在本文中意味着什么,它确实提供了一个回调来获取每个视频帧。抱歉@caprica这是因为我对vlcj的知识绝对缺乏。如果您能指导我找到帧对帧访问回调的正确用法示例或文档,我将非常乐意使用它。@caprica我的评论来自于此,所以请回答:这里有两件事,首先,如果您希望能够导航到特定帧,那么没有直接的API可以做到这一点。如果您想在播放流时获得视频帧数据的回调,可以这样做。因此,vlcj是否合适完全取决于您正在尝试做什么。感谢caprica提供的详细答案,但它将在服务器环境中运行,因此我们不想显示任何帧,我们只需要在帧上运行某些其他操作。DirectMediaPlayer似乎是正确的选择,请告诉我如何正确使用它。没有必要用这样的方法显示框架。我没有什么要补充的,如果你不喜欢这个答案,那是你的特权。我没有对你无礼,我只是说了需要说的,就像在所有需要提到的例子中一样,但现在我设法绕开了,我真的很感谢你的回答。