岁月联盟 · 中国技术网 本站主页 | 安全认证 | 用户服务 | 技术论坛
新闻快报 | 新手学堂 | 黑客特区 | 程序语言 | 数 据 库 | 防 火 墙 | 路由交换 | 系统集成 | 服 务 器 | 存储备份 | 考试认证
Windows | Linux | Java | 协议分析 | 问题解答 | 进程大全 | 网页设计 | 多 媒 体 | 图库资料 | 软件下载 | 站内下载
  您现在的位置: 岁月联盟 >> Java >> 核心技术 >> JavaMedia >> Java正文
技术交流:QuickTime流媒体和Java(图)
作者:未知 文章来源:本站整理 点击数: 更新时间:2007-7-22 17:29:59
ld == " +
  pres.getGWorld() + ", size == "+
  mediaParams.getWidth() + "x" +
  mediaParams.getHeight() + ", streams == " +
  pres.getNumStreams());
  
  //*******这不是真正地必要的, 但它将告诉你怎么通过Presentation游览来挑选各自的流媒体。 Presentation.getIndStream 会由索引返回一个Stream(附注QuickTime 索引都是基于1)。它重复这些audioMediaCharacteristic 请求查找音频流 (对于录影, 您就要请求visualMediaCharacteristic) 。 这个实例在audioStream上为左右声道设置音量最大值为100。
  
  最后, println从Presentation和MediaParams转存一些有意义的元数据。
  
  配置Presentation
  
  SettingsDialog sd = new SettingsDialog (pres);
  System.out.println ("Did settings");
  pres.preroll();
  broadcasting = false;
  
  这是设置presentation最后的步骤。 SettingsDialog存在用户以输入装置选择的音频和视频 (二个流媒体SDP 文件被指定在Presentation中) 。每个流媒体都可由一个压缩格式来定制 (MPEG-4, Sorenson Video 3, H.263, 等) 以及一个分包器(有时由压缩格式定义; 可观察它是否随着压缩格式的改变而自动改变) 。 这个GUI实例显示在图1 。
  
 
  图像1. 为一个Presentation SettingsDialog

  
  在此图中, 音频默认为计算机连线输入。更改它为iSight, 您需要点击Source按钮,提出的可选设备列表显示在图2上 。
  
 
  图2. 来源选择对话框

  
  最后就是调用Presentation.preroll(), 如同Movie.preroll(), 提供Presentation一个机会预先分配资源以及准备好开始流媒体Presentation。
  
  提供一个控制GUI
  
  // Make monitor window
  startStopButton = new Button ("Start");
  configButton = new Button ("Configure");
  startStopButton.addActionListener (this);
  configButton.addActionListener (this);
  Frame monitorFrame = new Frame ("QTJ Streaming");
  monitorFrame.setLayout (new BorderLayout());
  Panel buttonPanel = new Panel();
  buttonPanel.add (startStopButton);
  buttonPanel.add (configButton);
  monitorFrame.add (buttonPanel, BorderLayout.SOUTH);
  monitorFrame.pack();
  monitorFrame.setVisible(true);
  
  这个为控制和配置Presentation设置了很小的GUI,提供基本的一个起始/停止键和一个配置按钮。 按钮作为一个ActionListener提交给this, 意味着这个类将需要提供一个actionPerformed方法来处理按钮点击。 控制GUI 的屏幕截图显示在图3 。
  
 
  图3. 监控/控制窗体

  
  在这点上你也许会问一个有趣的问题: "从什么时候我们开始关心使用GUI提供server?"据推测, 这是从Classic Mac OS开始的一个传统, 它没有一个用命令行启动和传递参数的程序。但此外, 你通常会希望提供一个流媒体数据的预览, 并且如果您有一个预览视窗, 为什么会也没有一个配置的GUI?
  
  无论如何, 这是大概的讨论, 因为QTJ 6.1 不提供您能使用来预览的一个AWT Component。在有些方面有希望的是, QTFactory将得到一个新的超负荷为采用一个Presentation并且返回一个显示流媒体视频的Component的makeQTComponent。 它大概可能使用一些QuickDraw voodoo而完全放弃Java的东西。 如果,在各task()中回调(参见下面) 您采取GWorld被及早创建, 转换它成Pict, 并且作为一份唯一命名的文件, 您会看见每一个都是不同的, 意味GWorld每次都得到新数据。 所以如果您替换掉GWorld, 改为能给AWT Component在各通道上定义象素, 您会有银幕上的预览。何人有胆量如此做? 在quicktime-java list上查看。
  
  详细资料
  
  // add shutdown handler to make sure presentation
  // gets stopped
  Thread presentationStopper = new Thread() {
  public void run() {
  try {
  pres.stop();
  } catch (QTException qte) {}
  }
  };
  Runtime.getRuntime().addShutdownHook (presentationStopper);
  
  这个关闭异常分支确定Presentation在程序退出之前被终止。 这是重要的原因, 象SequenceGrabber, Presentation愉快继续运行在您的应用程序退出之后,绑定一个端口,严重的循环, 使用您的获取设备保留其它应用程序, 等。
  } catch ( QTException e ) {
  e.printStackTrace();
  System.exit (-1);
  }
  }
  
  最后, 构造函数捕捉并抛出所有的QTExceptions。
  public void actionPerformed (ActionEvent ae) {
  System.out.println ("actionPerformed");
  try {
  if (ae.getSource() == startStopButton) {
  if (broadcasting) {
  pres.stop();
  stopTasking();
  broadcasting = false;
  startStopButton.setL

上一页  [1] [2] [3] [4] 下一页


  • 上一个Java:
  • 下一个Java:
  •  
    热门文章
    推荐文章
    关于我们 | 发展历程 | 网站地图 | 广告服务 | 招贤纳士 | 战略合作 | 友情链接 | 著作声明 | 联系我们
    Copyright © 2002-2007 SYUE All rights reserved.
    E_mail:Admin@Syue.Com 皖ICP备05004589号
    未经授权禁止转载、摘编、复制或建立镜像.如有违反,追究法律责任.
    bet365 传世私服 天龙八部私服 热血江湖私服 英雄合击传奇私服 机战私服 惊天动地私服 天龙八部私服 热血江湖私服 bet365 天龙八部私服 bet365 传世私服 传奇世界私服