gpt4 book ai didi

java - 如何使用 JavaCV 接收 RTP 流?

转载 作者:行者123 更新时间:2023-12-04 23:24:32 24 4
gpt4 key购买 nike

我正在尝试从 RTP 服务器(当前用于测试的 VLC)流式传输视频并用 Java 对其进行解码。为此,我使用 JavaCV解码传入的流。这是我到目前为止所拥有的:

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 视频
  • 流所有基本流是离开。

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

    切换到Java,我能看到的只是灰色的框架,到处都是颜色。控制台也在整个过程中尖叫。一些片段(完整的日志太长,不能成为一个合理的帖子,但如果你真的想要,可以找到 here):
    [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
    [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
    [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

    有什么我明显做错了吗?

    最佳答案

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

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

    关于java - 如何使用 JavaCV 接收 RTP 流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54136029/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com