пятница, 30 марта 2012 г.

Написание простого видео плеера на Java с использованием JMF API

Буквально сегодня, во время написания дипломной работы, связанной с разработкой интерпретатора для формального языка, столкнулся с задачей написания видео плеера. А поскольку моя дипломная косвенно связанна с обработкой мультимедиа, от видео плеера требовалась максимальная простота, а именно банальное проигрывание видео файлов. С обработкой видео я столкнулся впервые, поэтому я начал гуглить и нагуглил, собственно, JMF(Java Media Framework), которая выглядела вполне подходящей.

Найти библиотеку JMF API можно на сайте Oracle или через *ваш любимый поисковик* (последняя рабочая версия 2.1.1e).
В архиве будет 4 jar файла, которые надо будет добавить к проекту. Я работал в Eclipse, поэтому для того, чтобы добавить их в проект, достаточно кликнуть правой кнопкой по проекту, выбрать Build Path-Configure Build Path-Add External JARs

Код реализации представлен ниже:

package example;

import java.awt.Dimension;
import javax.swing.*;
import javax.media.bean.playerbean.MediaPlayer;

class VideoExample extends JFrame{
MediaPlayer player;//наш плеер

public VideoExample(String path){
super("Простой видео плеер");

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setSize(new Dimension(640,480));//устанавливаем размер окна

player = new MediaPlayer();
//path - путь к файлу
player.setMediaLocation("file:///" + path);
player.setPlaybackLoop(false);//Повтор видео
player.prefetch ();//предварительная обработка плеера (без неё плеер не появится)
//добавляем на фрейм
add(player);
//player.start (); - сразу запустить плеер

setVisible(true);
}

public static void main(String []args){
VideoExample ve = new VideoExample("D:\\1.mpeg");
}
}


Вот тут и появилась проблема. Оказывается, хоть в документации к JMF и объявлена поддержка таких распространенных форматов, как avi и mpeg, на деле же это далеко не так. Видео либо не запускается вовсе, либо слышна только звуковая дорожка. Гугл показал, что с данной проблемой сталкивалось немало

пользователей(а сколько ещё сталкнётся?), вот только из кучи ссылок ответ нашелся лишь в одной. 
Для решения данной проблемы к проекту необходимо добавить библиотеку jffmpeg-1.1.0.jar, который содержит кодеки для видео(и аудио, кстати) форматов. 

Скачать её можно с официального сайта, который также легко находится поисковиком.

После добавления данной библиотеки видео тут же заработало. 

image

Надеюсь, если статью пропустят, она поможет тем, кто столкнётся с подобной проблемой в будущем. Да и рабочий пример будет весьма полезен для начинающих программистов. На решение данной проблемы я потратил непростительное количество часов работы, давайте экономить время:)

2 комментария: