我有一个问题,我在一周的大部分时间里一直在努力,并尝试过至少10种不同的实现,但似乎都失败了.必须有一些我不理解的东西.

我正在使用jmf通过rtp传输音频.问题是客户端玩家永远不会意识到代码块,因此也没有任何东西可以播放.

Transmitter的代码如下:

import java.io.File;

import java.io.IOException;

import javax.media.DataSink;

import javax.media.Format;

import javax.media.Manager;

import javax.media.MediaLocator;

import javax.media.NoProcessorException;

import javax.media.NotRealizedError;

import javax.media.Processor;

import javax.media.control.FormatControl;

import javax.media.control.TrackControl;

import javax.media.format.AudioFormat;

import javax.media.protocol.ContentDescriptor;

import javax.media.protocol.DataSource;

public class RTPTransmitter

{

/**

* @param args

*/

public static void main(String[] args)

{

File f = new File("streamtest.wav");

Format format;

format = new AudioFormat(AudioFormat.ULAW_RTP, 8000, 8, 1);

Processor processor = null;

try

{

processor = Manager.createProcessor(f.toURI().toURL());

} catch (IOException e)

{

e.printStackTrace();

System.exit(-1);

} catch (NoProcessorException e)

{

e.printStackTrace();

System.exit(-1);

}

// configure the processor

processor.configure();

while (processor.getState() != Processor.Configured)

{

try

{

Thread.sleep(100);

} catch (InterruptedException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

}

processor.setContentDescriptor(new ContentDescriptor(ContentDescriptor.RAW_RTP));

TrackControl track[] = processor.getTrackControls();

boolean encodingOk = false;

// Go through the tracks and try to program one of them to

// output gsm data.

for (int i = 0; i < track.length; i++)

{

if (!encodingOk && track[i] instanceof FormatControl)

{

if (((FormatControl) track[i]).setFormat(format) == null)

{

track[i].setEnabled(false);

} else

{

encodingOk = true;

}

} else

{

// we could not set this track to gsm, so disable it

track[i].setEnabled(false);

}

}

//realize the processor

processor.realize();

while(processor.getState() != processor.Realized){

try

{

Thread.sleep(100);

} catch (InterruptedException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

}

// At this point, we have determined where we can send out

// gsm data or not.

if (encodingOk)

{

// get the output datasource of the processor and exit

// if we fail

DataSource ds = null;

try

{

ds = processor.getDataOutput();

} catch (NotRealizedError e)

{

e.printStackTrace();

System.exit(-1);

}

// hand this datasource to manager for creating an RTP

// datasink our RTP datasink will multicast the audio

try

{

String url = "rtp://127.0.0.1:8000/audio/1";

MediaLocator m = new MediaLocator(url);

DataSink d = Manager.createDataSink(ds, m);

d.open();

d.start();

System.out.println("Starting processor");

processor.start();

System.out.println("Processor Started");

Thread.sleep(30000);

} catch (Exception e)

{

e.printStackTrace();

System.exit(-1);

}

}

}

}

接收器的代码是:

import java.io.IOException;

import java.net.MalformedURLException;

import javax.media.Manager;

import javax.media.MediaLocator;

import javax.media.NoPlayerException;

import javax.media.Player;

public class RTPReceiver

{

/**

* @param args

*/

public static void main(String[] args)

{

String url = "rtp://127.0.0.1:8000/audio/1";

MediaLocator mrl = new MediaLocator(url);

// Create a player for this rtp session

Player player = null;

try

{

player = Manager.createPlayer(mrl);

} catch (NoPlayerException e)

{

e.printStackTrace();

System.exit(-1);

} catch (MalformedURLException e)

{

e.printStackTrace();

System.exit(-1);

} catch (IOException e)

{

e.printStackTrace();

System.exit(-1);

}

if (player != null)

{

System.out.println("Player created.");

player.realize();

// wait for realizing

while (player.getState() != Player.Realized)

{

try

{

Thread.sleep(10);

} catch (InterruptedException e)

{

e.printStackTrace();

}

}

System.out.println("Starting player");

player.start();

} else

{

System.err.println("Player won't create.");

System.exit(-1);

}

System.out.println("Exiting.");

}

}

发射器启动良好,一切都开始了,一切似乎都有效.所以我启动接收器,它只是循环

while (player.getState() != Player.Realized)

令我非常沮丧的是,这是一个简单的测试用例,这些文件可以直接从示例中进行调整.此外,它们尽可能简单,但它们似乎仍无法正常工作.

任何帮助将不胜感激!

谢谢!

java jmf播放声音_java – 使用RTP在JMF中实现播放器相关推荐

  1. java 媒体框架_Java 媒体框架 之 JMF

    如果想要使用Java中的Swing播放音乐,视频,包括录音,截取录像等等,就要用到Java的媒体框架JMF. Java媒体框架(JMF)使你能够编写出功能强大的多媒体程序,却不用关心底层复杂的实现细节 ...

  2. 深圳java培训:使用原生JS重构简单的音乐播放器

    深圳java培训:使用原生JS重构简单的音乐播放器 上次,我们使用Jquery开发了一款简单的音乐播放器(如下图), 后来学生希望能够用原生的JS重构一次, 那么,下面就来看看如何使用原生的JS重构吧 ...

  3. Java运用jna、vlcj实现音乐和视频的播放器1-主界面设计

    一.播放器主框架 public class MainFrame {public JFrame frame;public int width = 100;public int height = 350; ...

  4. Java多媒体框架JFM中的播放器

    原文: Overview Package Class Tree Deprecated Index Help PREV CLASS NEXT CLASS FRAMES NO FRAMES SUMMARY ...

  5. java 正则 捕获_Java通过正则表达式捕获组中的文本

    1.简介 Java 正则表达式如何捕获组中的文本 ?--请看下文. 2.代码 /** * 版权所有 编程十万个怎么办(www.tah1986.com) */ public class Capturin ...

  6. 实用Java程序设计教程_java程序设计实用教程 书中代码.pdf

    例2-1 Example2_1.java public class Example2_1 { public static void main(String args[]) { Rect rectang ...

  7. java reactor框架_Java反应式框架Reactor中的Mono和Flux

    1. 前言 最近写关于响应式编程的东西有点多,很多同学反映对Flux和Mono这两个Reactor中的概念有点懵逼.但是目前Java响应式编程中我们对这两个对象的接触又最多,诸如Spring WebF ...

  8. java pdf 书签_Java 展开或折叠PDF中的书签

    PDF中的书签功能可快速定位到指定阅读位置.对多层书签可根据阅读喜好设置层级展开或折叠.本文将通过Java程序代码介绍如何来实现PDF书签展开或折叠. 程序环境 Spire.Pdf.jar( 免费版3 ...

  9. java按钮退出_java – 如何在此程序中添加退出按钮?怎么样“清楚”?

    我需要添加一个"清除计算器"的按钮,以及一个退出butPanel上的程序的按钮.它也需要是非常基本的 Java代码,因为我是初学者,并且有一个糟糕的comp.sci.老师.我有一个 ...

最新文章

  1. ArcGIS 9.3 安装之 Server的安装
  2. 解决html5 audio iphone,ipd,safari不能自动播放问题
  3. 【深入Java虚拟机】之四:类加载机制
  4. dbnull和null_NULL和DBNull的区别分析
  5. 监视和管理GlassFish 3的多种方法
  6. 检测到会话cookie中缺少HttpOnly属性
  7. 利用计算机管理分区,win7增加磁盘分区教学 利用磁盘管理增加分区
  8. 世界大学生超算竞赛正式启动,再次引发全球关注
  9. C结构体之位域(位段)
  10. 如何取消计算机的自动更新,电脑自动更新如何取消 电脑自动更新取消方法
  11. C#的变迁史 - C# 5.0 之其他增强篇
  12. iOS之摇一摇功能实现
  13. [2018.10.23 T1] 战争
  14. 【读书笔记《Bootstrap 实战》】4.企业网站
  15. timeroc 最优最佳截断值特异度(specificity)与灵敏度(sensitivity)
  16. Java通过http协议下载文件并写入字节流的方法
  17. 双系统启动引导项配置
  18. 液晶显示屏的C语言编码,AT89C51单片机驱动液晶显示汉字C语言
  19. 利用镜像解决一系列下载速度慢的问题
  20. 一款基本靠谱,略微出圈的2021十大科技预测

热门文章

  1. overleaf 公式_LATEX 公式通栏
  2. 2020.3.18普及C组 音乐节拍(mnotes)【纪中】【二分】
  3. [科普]为什么360会报键盘记录
  4. 微信小程序时间戳转日期,日期格式自己随意更改
  5. vue:实现简单的拖拽功能
  6. PyTorch的基本概念
  7. 算法设计与分析 实验二 贪心算法
  8. 算法设计与分析实验二:动态规划法实现TSP问题和0/1背包问题
  9. Linux用户态进程如何监控内存被写事件
  10. 2021年电工(初级)考试题及电工(初级)模拟考试