首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用JavaCV接收RTP流?

如何使用JavaCV接收RTP流?
EN

Stack Overflow用户
提问于 2019-01-10 19:54:21
回答 1查看 751关注 0票数 0

我正在尝试从RTP服务器(目前是用于测试的VLC )中流视频,并用Java对其进行解码。为此,我使用JavaCV对传入流进行解码。到目前为止,我的情况如下:

代码语言:javascript
复制
try {
    grabber = new FFmpegFrameGrabber("rtp://localhost:5004/test");
    grabber.setFormat("h264");
    grabber.setFrameRate(30.0);
    grabber.start();
    Java2DFrameConverter converter = new Java2DFrameConverter();
    while (true) {
        Frame frame = grabber.grab();
        imageToDraw = frame != null ? converter.convert(frame) : null;
        // goes off to paint a widget on a window, see https://git.io/fhZSr for more context
        repaint();
    }
} catch (Exception e) {
    // TODO: Discover what circumstances cause this
    e.printStackTrace(System.out);
}

在VLC上,我的流设置设置如下:

  • 目标流: RTP/TS (地址localhost、端口5004和流名test)。
  • 活动代码转换,设置为“视频- H.264 + MP3 (TS)”预置:
    • MPEG-TS封装
    • 带有MPEG音频的h.264视频

  • 所有基本流都是off.

我可以让一个VLC实例流到具有这些设置的另一个VLC实例(使用从rtp://localhost:5004/test接收的“客户端”VLC),它工作得很好。(唯一的问题是有一台不适合转换高分辨率视频的弱测试机器。)

切换到Java,我所能看到的就是到处都是彩色的灰色帧。控制台也在一路尖叫。有些片段(完整的日志太长,不可能是一个合理的帖子,但如果您真的想要它,可以找到这里 ):

代码语言:javascript
复制
[h264 @ 0x7f6c4c3502c0] cabac decode of qscale diff failed at 8 12
[h264 @ 0x7f6c4c3502c0] error while decoding MB 8 12, bytestream 670
[h264 @ 0x7f6c4c3502c0] concealing 421 DC, 421 AC, 421 MV errors in P frame
代码语言:javascript
复制
[h264 @ 0x7f6c4c3502c0] Reference 4 >= 2
[h264 @ 0x7f6c4c3502c0] error while decoding MB 25 8, bytestream 416
[h264 @ 0x7f6c4c3502c0] concealing 556 DC, 556 AC, 556 MV errors in B frame
代码语言:javascript
复制
[h264 @ 0x7f6c4c3502c0] Reference 5 >= 4
[h264 @ 0x7f6c4c3502c0] error while decoding MB 21 1, bytestream 6042
[h264 @ 0x7f6c4c3502c0] concealing 826 DC, 826 AC, 826 MV errors in P frame
[h264 @ 0x7f6c4c3502c0] Invalid NAL unit 8, skipping.
[above line repeats 5x]
[h264 @ 0x7f6c4c3502c0] top block unavailable for requested intra mode
[h264 @ 0x7f6c4c3502c0] error while decoding MB 3 0, bytestream 730
[h264 @ 0x7f6c4c3502c0] concealing 836 DC, 836 AC, 836 MV errors in P frame

我是不是做错了什么事?

EN

回答 1

Stack Overflow用户

发布于 2019-01-11 02:29:56

我假设您必须告诉FFmpegFrameGrabber正确的格式和代码。您的格式不是H.264,因为您正在发送MPEG-2传输流.尝试将格式(setFormat)设置为"mpegts“。视频编解码器用于H.264解码器,音频编解码器用于MPEG-2层3层解码器(MP3)。

假设错误消息是由H.264解码器试图读取MEPG-2传输流而产生的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54136029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档