JAVA网络流媒体播放器分析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

} public void play(int audio, int video) {// 开如捕捉视频
Manager.setHint(Manager.LIGHTWEIGHT_RENDERER, new Boolean(true)); audiocaptureInfo = audioDevices.get(audio); videocaptureInfo = videoDevices.get(video); audiolocator = audiocaptureInfo.getLocator(); videolocator = videocaptureInfo.getLocator(); videoplayer.setMediaLocator(videolocator); videoplayer.start(); audioplayer.setMediaLocator(audiolocator); audioplayer.start(); } public void stop() {// 停止捕捉 videoplayer.stop(); videoplayer.close(); audioplayer.stop(); audioplayer.close(); } public void playandsave(int audio, int video) {// 能同时播放音频和视频 DataSource[] dataSources = new DataSource[2]; audiocaptureInfo = audioDevices.get(audio); videocaptureInfo = videoDevices.get(video); audiolocator = audiocaptureInfo.getLocator(); videolocator = videocaptureInfo.getLocator(); try { Manager.setHint(Manager.LIGHTWEIGHT_RENDERER, new Boolean(true)); dataSources[0] = Manager.createDataSource(audiolocator); dataSources[1] = Manager.createDataSource(videolocator); DataSource ds = Manager.createMergingDataSource(dataSources); dualPlaye = Manager.createPlayer(ds); dualPlaye.start(); } catch (NoDataSourceException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (IncompatibleSourceException e) { e.printStackTrace(); } catch (NoPlayerException e) { e.printStackTrace(); } } public void savevideo(String type) {// 保存视频 try { Format formats[] = new Format[2];
Java 网络流媒体播放器分析
本节利用上面介绍的利用 JMF 框架开发开发视频和音频捕捉程序, 以及如何发送和接收捕 捉到的流媒体数据的开发过程来设计一个视频,音频捕捉综合处理系统,本程序主要实现的 功能有: (1)读取系统中己安装的音频和视频设置,然后区分设置类型,添加到设置列表中。 (2)根据所选择的设备,捕捉视频和音频数据并播放捕捉到的媒体数据。 (3)对正在播放的视频数据正进拍照并保存为图片。 (4)保存捕捉到的视频和音频数据到一个媒体文件,其格式可以是 AVI 或 MOV。 (5)发送实时媒体数据到网络中。 (6)接收一个实时媒体流数据并播放。 (7)同时接收多个实时数据流并播放。 程序运行主界面如图 14-11 所示。
FileTypeDescriptor outputType = null; if (type.equals("avi")) {// 判断输出的文件类型格式 formats[0] = new AudioFormat(AudioFormat.IMA4_MS); formats[1] = new VideoFormat(VideoFormat.CINEPAK);//设置为 AVI 格式 outputType = new FileTypeDescriptor(FileTypeDescriptor.MSVIDEO); } else if (type.equals("mov")) { formats[0] = new AudioFormat(AudioFormat.IБайду номын сангаасA4); formats[1] = new VideoFormat(VideoFormat.CINEPAK); outputType = new FileTypeDescriptor(FileTypeDescriptor.QUICKTIME);//QuickTime 格式 } // 创建 ProcessorModel,参数为数据轨道输出格式和文件输出类型 // 由 ProcessorModel 对象创建 Processor 对象 this.vprocessor = Manager.createRealizedProcessor(new ProcessorModel(formats,outputType)); this.vprocessor.configure(); System.out.println("正在配置处理器,请稍后......"); this.vprocessor.realize(); // 获取 Processor 的输出 DataSource source = vprocessor.getDataOutput(); File ff = new File("d:/vidio." + type); // 建立一个记录保存文件的 MediaLocator MediaLocator dest = new MediaLocator(ff.toURL()); // 创建数据池 filewriter = Manager.createDataSink(source, dest); filewriter.open(); // 设置 Processor 控制生成文件的大小,只要调用 Processor 的 StreamWriterControl StreamWriterControl swc = (StreamWriterControl) vprocessor
CaptureDeviceInfo audiocaptureInfo, videocaptureInfo;// 设备信息 {
audioplayer = new MediaPlayer();// 初始化播发器 videoplayer = new MediaPlayer();
} public Processor getVprocessor() {
return this.vprocessor; } public Player getDualPlaye() {
return this.dualPlaye; } public MediaPlayer getVideoplayer() {
return this.videoplayer; } public MediaPlayer getAudioplayer() {
CaptureDeviceInfo cdi = (CaptureDeviceInfo) deviceList .elementAt(i);
formats = cdi.getFormats(); System.out.println(cdi.getName()); for (int j = 0; j < formats.length; j++) { if (formats[j] instanceof AudioFormat) {
return this.audioplayer; } public CaptureAudio() {// 读取设备列表
deviceList = CaptureDeviceManager.getDeviceList(null); if (deviceList != null & deviceList.size() > 0) { int deviceCount = deviceList.size(); Format[] formats; for (int i = 0; i < deviceCount; i++) {
图 14-11 视频和音频捕捉程序运行主界面 当选择同时接收多个实时数据流时,系统会自动弹出收到的每个媒体流的播放窗口,这样就 以同时查看多个媒体流的视频数据。多个媒体流视频播放窗口如图 14-12 所示。
图 14-12 多个媒体流视频播放窗口 14.4.2 媒体设备捕捉和发送类 实现媒体设备捕捉和发送类 CaptureAudio 代码如清单 14-6。 清单 14-6 package com.javapp.ch14; import javax.media.*; import javax.media.bean.playerbean.MediaPlayer; import javax.media.control.*; import javax.media.format.*; import javax.media.protocol.*; import javax.media.util.BufferToImage; import com.sun.image.codec.jpeg.*; public class CaptureAudio { Vector deviceList = new Vector();// 用于保存设备 Vector<CaptureDeviceInfo> audioDevices = new Vector<CaptureDeviceInfo>();// 保存音频设备 Vector<CaptureDeviceInfo> videoDevices = new Vector<CaptureDeviceInfo>();// 保存视频设备 MediaPlayer audioplayer = null;// 音频播放器 MediaPlayer videoplayer = null;// 视频播放器 Player dualPlaye = null;// 能同时播放音频和视频 MediaLocator audiolocator = null;// 音频设备的位置信息 MediaLocator videolocator = null;// 视频设备的位置信息 javax.media.Processor vprocessor = null;// 媒体处理器,用于保存视频 DataSink filewriter = null;// 保存视频数据池
audioDevices.addElement(cdi);// 音频设备 break; } else if (formats[j] instanceof VideoFormat) { videoDevices.addElement(cdi);// 视频设备 break; } } } } } public Vector<CaptureDeviceInfo> getAudioDevices() { return this.audioDevices; } public Vector<CaptureDeviceInfo> getVideoDevices() { return this.videoDevices;
相关文档
最新文档