JMF捕获音频和视频(一)

相关文章:JMF捕获音频和视频(二)

1.捕获媒体数据的步骤:

l 查询CaptureDeviceManager,来定位你需要使用的媒体采集设备。

l 得到此设备的CaptureDeviceInfo实例。

l 从此CaptureDeviceInfo实例获得一个MediaLocator,并通过它来创建一个DataSource。

l 用此DataSource创建一个Player或Processor。

l 启动此Player或Processor开始捕获媒体数据。

2.CaptureDeviceManager、CaptureDeviceInfo、MediaLocator

在JMF中,CaptureDeviceManager也是一个manager类,它提供给了一个列表,这个列表显示当前系统可以被使用的设备名称。同时CaptureDeviceManager可以通过查询的方法对设备进行定位并返回设备的配置信息对象CaptureDeviceInfo,它也可以通过注册的方法向列表加入一个新的设备信息,以便为JMF使用。

设备可通过CaptureDeviceManager的getDevice()方法直接获得设备控制权,设备的控制权一旦得到,就可以以此设备作为一个MediaLocator,可以通过CaptureDeviceInfo的getLocator()方法得到。

3.JMF识别的音频采集设备

4.一个实例实现音频捕获

实例有两个文件组成。CaptureAudio.java实现

①查询、获得音频采集设备。

②捕获音频。

③将音频保存到本地文件foo.wav。

StateHelper实现处理器(processor)的状态控制管理。以下为流程图:

5.音频捕获代码实例:

CaptureAudio.java

import java.io.IOException;import java.util.Vector;import javax.media.CaptureDeviceInfo;import javax.media.CaptureDeviceManager;import javax.media.DataSink;import javax.media.Manager;import javax.media.MediaLocator;import javax.media.NoDataSinkException;import javax.media.NoProcessorException;import javax.media.Processor;import javax.media.control.StreamWriterControl;import javax.media.format.AudioFormat;import javax.media.protocol.DataSource;import javax.media.protocol.FileTypeDescriptor;public class CaptureAudio {/*** Writing captured audio to a file with a DataSink.*/public static void main(String[] args) {CaptureDeviceInfo di = null;Processor p = null;StateHelper sh = null;//查询CaptureDeviceManager,来定位你需要使用的媒体采集设备。Vector deviceList = CaptureDeviceManager.getDeviceList(newAudioFormat(AudioFormat.LINEAR, 44100, 16, 2));if (deviceList.size() > 0){//得到此设备的CaptureDeviceInfo实例。di = (CaptureDeviceInfo)deviceList.firstElement();}else// 找不到满足(linear, 44100Hz, 16 bit,stereo audio.)音频设备,退出。System.exit(-1);try {//获得MediaLocator,并由此创建一个Processor。p = Manager.createProcessor(di.getLocator());sh = new StateHelper(p);} catch (IOException e) {e.printStackTrace();System.exit(-1);} catch (NoProcessorException e) {e.printStackTrace();System.exit(-1);}// Configure the processorif (!sh.configure(10000)){System.out.println("configure wrong!");System.exit(-1);}//定义待存储该媒体的内容类型(content type)。p.setContentDescriptor(newFileTypeDescriptor(FileTypeDescriptor.WAVE));// realize the processor.if (!sh.realize(10000)){System.out.println("realize wrong!");System.exit(-1);}// get the output of the processorDataSource source = p.getDataOutput();//定义存储该媒体的文件。MediaLocator dest = new MediaLocator(new java.lang.String("file:///D:/Dvp/workspace/JavaSoundMedia/foo.wav"));//创建一个数据池DataSink filewriter = null;try {filewriter = Manager.createDataSink(source, dest);filewriter.open();} catch (NoDataSinkException e) {e.printStackTrace();System.exit(-1);} catch (IO

相信人生有挫折没有失败,相信生命的质量来自决不妥协的信念。

JMF捕获音频和视频(一)

相关文章:

  • 【算法】直接插入排序C语言实现
  • 嵌入式 FAAC1.28 在海思HI3518C/HI3518A平台linux中的编译优化
  • Android 动画animation 深入分析
  • 你感兴趣的文章:

    标签云:

    亚洲高清电影在线, 免费高清电影, 八戒影院夜间, 八戒电影最新大片, 出轨在线电影, 午夜电影院, 在线影院a1166, 在线电影院, 在线观看美剧下载, 日本爱情电影, 日韩高清电影在线, 电影天堂网, 直播盒子app, 聚合直播, 高清美剧, 高清美剧在线观看 EhViewer-E站, E站, E站绿色版, qqmulu.com, qq目录网, qq网站目录,