【问题标题】:why jmf can't play rtp stream?为什么 jmf 不能播放 rtp 流?
【发布时间】:2026-01-11 15:25:01
【问题描述】:

我用 ffmpeg 制作了一个 rtp 链接,并尝试收听和播放此流。 VLC 和 ffmpeg 可以播放 rtp 流,两者都运行良好,但 jmf 不行。

虽然没有任何错误,但是jmf没有播放rtp流,也没有声音。

我的 rtp 流(http:.. 是一个广播链接,而 rtp:... 我的流)

ffmpeg -i http://airspectrum.cdnstream1.com:8114/1648_128 -acodec copy -f rtp "rtp://127.0.0.1:10000/audio/1"

public void play() {
    MediaLocator mediaLocator = new MediaLocator("rtp://127.0.0.1:10000/audio/1");
    try {
        if (mediaLocator == null) {
            System.err.println("null locator");
        }
        player = Manager.createRealizedPlayer(mediaLocator);
        player.start();
    } catch (CannotRealizeException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (NoPlayerException e) {
        e.printStackTrace();
    }

}
  1. 操作系统 ubuntu 16.08
  2. java jdk 1.8
  3. javax.media.jmf 2.1.1e(maven repo 版本)

【问题讨论】:

  • 是这些格式之一吗? -> oracle.com/technetwork/java/javase/…
  • 我将 ffmpeg 编解码器更改为 jmf 支持的 mp2 (Audio: MPEG Layer I, II),但仍然没有声音。这是用于服务器端(产生 rtp 流)。和客户端我发现>> Format input1 = new AudioFormat(AudioFormat.MPEG_RTP);格式输出 = new AudioFormat(ContentDescriptor.RAW_RTP); PlugInManager.addPlugIn("com.sun.media.codec.audio.mp3.JavaDecoder", new Format[] {input1}, new Format[] {output}, PlugInManager.CODEC );但没有变化。
  • com.sun.media.codec.audio.mp3.JavaD‌​e编码器用于输出? Idk,但这是对的吗?
  • 是的,它是正确的,没有变化。我发现了这个>>在 JMF 的全 Java 版本中,不支持视频捕获,只有在 J2SE 1.3(捆绑了 Java Sound API)上运行时才支持音频捕获。 Direct Audio 渲染器和捕获器仅在 Windows 上受支持。 (oracle.com/technetwork/java/javase/issues-139827.html) 也许我在 Windows 上尝试使用 J2SE 1.3 而不是 ubuntu

标签: java ffmpeg stream rtp jmf


【解决方案1】:

打开您的主机文件(nano /etc/hosts)并添加您的 ip 和用户名(192.168.X.XXX 用户名)。我不知道确切的原因,但它对我有用!

【讨论】: