JMF实现将从摄像头和麦克读取的媒体信息保存成视频文件

来源:互联网 发布:多系统引导软件 编辑:程序博客网 时间:2024/04/30 15:41

编写JMF的程序最应该注意的是player的状态,因为只有player经过了正常的状态转换才能够正常进行读取媒体信息,和对媒体信息进行正常的操作。

以下是对读取的媒体信息进行保存的测试,程序启动后会读取10秒的媒体信息并进行保存:

package com.lcq.jmf;import java.io.File;import java.io.IOException;import javax.media.DataSink;import javax.media.Manager;import javax.media.MediaLocator;import javax.media.Processor;import javax.media.format.VideoFormat;import javax.media.protocol.DataSource;import javax.media.protocol.FileTypeDescriptor;import jmapps.util.StateHelper;public class Save2File {public static void main(String[] args) throws Exception {// CaptureDeviceInfo info = (CaptureDeviceInfo)// CaptureDeviceManager.getDeviceList(new VideoFormat(null)).get(0);MediaLocator mediaLocator = new MediaLocator("vfw://0");// 此类描述媒体目录的地址????MediaLocator audioLocator = new MediaLocator("javasound://44100");DataSource[] dataSources = new DataSource[2];dataSources[0] = Manager.createDataSource(mediaLocator);dataSources[1] = Manager.createDataSource(audioLocator);DataSource ds = null;ds = Manager.createMergingDataSource(dataSources);ds = Manager.createCloneableDataSource(ds);Processor p = null;try {p = Manager.createProcessor(ds);} catch (Exception e) {e.printStackTrace();}StateHelper sh = new StateHelper(p);sh.configure(5000);VideoFormat vf = new VideoFormat(VideoFormat.CINEPAK);// AudioFormat vf = new AudioFormat(AudioFormat.IMA4);p.getTrackControls()[0].setFormat(vf);p.getTrackControls()[0].setEnabled(true);p.setContentDescriptor(new FileTypeDescriptor(FileTypeDescriptor.QUICKTIME));sh.realize(5000);File file = new File("video.avi");try {file.createNewFile();} catch (IOException e1) {e1.printStackTrace();}DataSink sink = null;try {sink = Manager.createDataSink(p.getDataOutput(), new MediaLocator(file.toURL()));} catch (Exception e) {e.printStackTrace();}try {p.start();sink.open();sink.start();} catch (Exception e) {e.printStackTrace();}try {Thread.sleep(10000);// 录制10秒} catch (InterruptedException e) {e.printStackTrace();}try {p.close();sink.stop();sink.close();} catch (Exception e) {e.printStackTrace();}}}

该程序中处理了视频的格式问题,可以进行存储后直接播放。但是视频和音频的混合播放好像有点问题,还需解决。


原创粉丝点击