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

编写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(); } } }
该程序中处理了视频的格式问题,可以进行存储后直接播放。但是视频和音频的混合播放好像有点问题,还需解决。


转载于:https://www.cnblogs.com/lcqBlogs/archive/2012/03/08/2392366.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值