Разбираюсь с JMF и решил написать простенькую програмку, которая берет из веб камеры видео поток и записывает в файл.
| Код |
Vector devices =CaptureDeviceManager.getDeviceList(new VideoFormat(VideoFormat.YUV)); CaptureDeviceInfo di = (CaptureDeviceInfo) devices.elementAt(0); MediaLocator mi = di.getLocator();
DataSource mainsource = Manager.createDataSource(mi); proc = Manager.createProcessor(mainsource); StateHelper stathelp = new StateHelper(proc); stathelp.configure(10000); VideoFormat vfmt = new VideoFormat(VideoFormat.CINEPAK); proc.getTrackControls()[0].setFormat(vfmt); proc.getTrackControls()[0].setEnabled(true); proc.setContentDescriptor(new FileTypeDescriptor(FileTypeDescriptor.QUICKTIME)); Control control = proc.getControl("javax.media.control.FrameRateControl"); if ( control != null && control instanceof javax.media.control.FrameRateControl ) ((javax.media.control.FrameRateControl)control).setFrameRate(15.0f); stathelp.realize(10000); MediaLocator dest = new MediaLocator("file://newfile.mov"); DataSource data = proc.getDataOutput(); DataSink datasink = Manager.createDataSink(data,dest); proc.start();
datasink.start(); datasink.open(); proc.close(); datasink.stop(); datasink.close();
|
Вроде бы все написано правильно (по примерам что находил в сети аутпут потока в файл идет именно так), но выскакивает гнусный эксепшен
| Код | javax.media.NoDataSinkException: Cannot find a DataSink for: com.sun.media.multiplexer.BasicMux$BasicMuxDataSource@82764b at javax.media.Manager.createDataSink(Manager.java:1894) at VideoStreamReader.main(VideoStreamReader.java:66)
|
где 66 строчка это DataSink datasink = Manager.createDataSink(data,dest); может у кто уже встречался с такой ситуацией ? Спасибо за помощь ! (а я пока пойду снова читать документацию по JMF а то может чего важное упустил по незнаю )
|