我正在编写一个客户端-服务器应用程序,它可以将基于安卓的手机实时视频传输到服务器。从手机摄像头捕获的视频使用 android 提供的 h264 编码器进行编码,并通过 UDP 套接字传输。这些帧不是 RTP 封装的。我需要它来减少开销,从而减少延迟。
在接收器上,我需要解码传入的编码帧。在 UDP 套接字上发送的数据不仅包含编码帧,还包含与帧相关的一些其他信息,作为其 header 的一部分。每个帧都被编码为一个最终单元。
我能够从接收到的数据包中检索帧作为字节数组。我可以将此字节数组保存为原始 h264 文件并使用 vlc 播放,一切正常。
但是,我需要对这个框架进行一些处理,因此需要将它与 opencv 一起使用。
谁能帮我解码opencv中的原始h264字节数组?
可以使用ffmpeg吗?
最佳答案
简短的回答:ffmpeg 和 ffplay 将直接工作。我记得 Opencv 可以建立在这 2 个之上。所以使用 FFMEPG/FFSHOW 插件转换为 cv::Mat 应该不难。遵循文档
OpenCV can use the FFmpeg library (http://ffmpeg.org/) as backend to record, convert and stream audio and video. FFMpeg is a complete, cross-reference solution. If you enable FFmpeg while configuring OpenCV than CMake will download and install the binaries in OPENCV_SOURCE_CODE/3rdparty/ffmpeg/. To use FFMpeg at runtime, you must deploy the FFMepg binaries with your application.
上次我要玩 DJI PSDK。他们只允许在 UDP 端口 udp://192.168.5.293:23003 使用 H.264 进行流式传输
所以我写了一个简单的ffmpeg接口(interface)来流式传输到PSDK。但我必须事先调试它。所以我使用 ffplay 来显示这个网络流以证明它正在工作。这是显示流的脚本。所以你必须在此基础上工作才能作为 opencv 插件工作
ffplay -f h264 -i udp://192.168.1.45:23003
关于opencv - opencv中的H264解码器用于实时视频传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22863586/