Воспроизведение видео с помощью JavaCV и FFmpeg

Итак, я разрабатываю пользовательский видеоплеер для Android, но мне нужно играть больше, чем поддерживаемые андроидами видеофайлы (mp4, 3gp …), такие как wmv, avi, flv.

В это время я уже конвертирую любой тип видео в .mp4, и я могу воспроизвести их после перекодировки, но я понятия не имею, как я могу проигрывать эти файлы wmv, avi, не перекодируя их в mp4.

Есть ли способ воспроизвести любое видео на Android без их перекодировки? Библиотека JavaCV + FFmpeg уже работает, просто не знаю, как это сделать.

Кстати, heres код, который я использую, чтобы перекодировать видео:

public static void convert(File file) { FFmpegFrameGrabber frameGrabber = new FFmpegFrameGrabber(file.getAbsolutePath()); IplImage captured_frame = null; FrameRecorder recorder = null; recorder = new FFmpegFrameRecorder("/mnt/sdcard/external_sd/videosteste/primeiroteste.mp4", 300, 300); recorder.setVideoCodec(13); recorder.setFrameRate(30); recorder.setFormat("mp4"); try { recorder.start(); frameGrabber.start(); while (true) { try { captured_frame = frameGrabber.grab(); if (captured_frame == null) { System.out.println("!!! Failed cvQueryFrame"); break; } recorder.record(captured_frame); } catch (Exception e) { } } recorder.stop(); recorder.release(); } catch (Exception e) { e.printStackTrace(); } } 

Сначала вы создаете CanvasFrame, затем используйте «canvas.showImage (capture_frame)»; Вместо «recorder.record (capture_frame)»;

Вот код:

 public class GrabberShow implements Runnable { final static int INTERVAL=40;///you may use interval IplImage image; static CanvasFrame canvas = new CanvasFrame("JavaCV player"); public GrabberShow() { canvas.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE); } public static void convert(File file) { FFmpegFrameGrabber frameGrabber = new FFmpegFrameGrabber(file.getAbsolutePath()); IplImage captured_frame = null; FrameRecorder recorder = null; //recorder = new FFmpegFrameRecorder("/mnt/sdcard/external_sd/videosteste/primeiroteste.mp4", 300, 300); recorder = new FFmpegFrameRecorder("D://temp.mp4", 300, 300); recorder.setVideoCodec(13); recorder.setFrameRate(30); recorder.setFormat("mp4"); try { recorder.start(); frameGrabber.start(); while (true) { try { captured_frame = frameGrabber.grab(); if (captured_frame == null) { System.out.println("!!! Failed cvQueryFrame"); break; } //recorder.record(captured_frame); canvas.showImage(captured_frame); Thread.sleep(INTERVAL); } catch (Exception e) { } } recorder.stop(); recorder.release(); } catch (Exception e) { e.printStackTrace(); } } @Override public void run() { convert(new File("D://aes.mp4")); } public static void main(String[] args) { GrabberShow gs = new GrabberShow(); Thread th = new Thread(gs); th.start(); } } 

Есть ли способ воспроизвести любое видео на Android без их перекодировки?

Почему вы записываете видео? Нет необходимости записывать видео. JavaCv.

Это образец кода, который дает вам представление о том, как вы можете его достичь.

 FrameGrabber grabber = new FrameGrabber(videoFile); grabber.start(); BufferedImage image= null; while((image=grabber.grab())!=null){ // TODO set the image on the canvas or panel where ever you want. } grabber.stop(); в FrameGrabber grabber = new FrameGrabber(videoFile); grabber.start(); BufferedImage image= null; while((image=grabber.grab())!=null){ // TODO set the image on the canvas or panel where ever you want. } grabber.stop(); 
Intereting Posts
Чтение децибела для Android Media Player Android: в чем разница между разрешением и плотностью? В чем разница между настройками «target» в файле «project.properties» и тегом «android: targetSdkVersion» в манифесте? DistanceBetween () возвращает неточный результат? Android Dialog, держите диалог открытым, когда кнопка нажата Ошибка «только для чтения файловой системы» при записи на SD-карту Не может щелкнуть по строке listview с помощью кнопки изображения Хранить объекты в ApplicationContext Почему добавление if-statement внутри этого метода значительно замедляет его? Как изменить фоновый цвет информационной области на ImageCardView? КоординаторLayout не заходит за строку состояния даже с окномTranslucentStatus и fitsSystemWindows Расширение действия навигационного ящика на другие виды деятельности API данных Youtube с OAuth2.0 на Android CursorLoader не обновляется после изменения данных Вставить из буфера обмена в Android