|
Java форум JavaTalks форум программистов
|
|
|
|
| Предыдущая тема :: Следующая тема |
| Автор |
Сообщение |
nightman13 : 40 Новичок
|
Янв 31, 2012 19:19 |
|
|
а насчет перемотки так и не могу понять, делаю следующим образом:
| Код: |
JSlider source = (JSlider) evt.getSource();
if (!source.getValueIsAdjusting())
{
int pos = (int) source.getValue();
position = (v.fs*pos)/100;
ta.stop();
tv.stop();
a = new Audio(filename, speed);
v = new Video(filename, screen, time, timel, speed);
ta = new Thread(a);
tv = new Thread(v);
ta.start();
tv.start();
v.positionV=position;
a.positionA=position; |
вроде бы переходит на нужное место, но видео останавливается на какое-то время, и больше не синхронизировано со звуком, да и звук при чтении .avi начинается неправильно воспроизводиться, а вот при чтении mp4 со звуком все нормально |
|
|
|
 |
nickliverpool : 18 Новичок
|
Янв 31, 2012 21:53 |
|
|
| Пока ничем помочь не могу, нужно иметь работающий код на руках и свободное время. Свободное время у меня появится только в пятницу, так что если до пятницы решить проблему не сможешь, скинь код (лучше архив с исходниками) и я попытаюсь разобраться. |
|
|
|
 |
nightman13 : 40 Новичок
|
Фев 01, 2012 14:38 |
|
|
|
|
|
|
 |
nickliverpool : 18 Новичок
|
Фев 07, 2012 20:42 |
|
|
Посмотрел... Насчет перемотки, думаю, как вариант можно сделать так.
У picture (экземпляра класса IVideoPicture) и samples (экземпляра класса IAudioSamples) есть метод getTimeStamp(), возвращающий Presentation Time Stamp в микросекундах. C помощью которого, например, можно будет отображать только те кадры, timestamp которых больше заданного ползунком для перемотки.
Серьезный минус этого метода в том, что для получения timestamp, например, у кадра, придется его декодировать. Соответственно, для перемещения к концу файла придется декодировать весь видеопоток, что очень плохо.
Либо, думаю, можно читать timestampt у packet, но тогда для получения времени в микросекундах или миллисекундах придется в зависимости от того, packet ли это видео или аудиопотока, самостоятельно преобразовывать число, получаемое при вызове packet.getTimeStampt() (Подробнее тут -> http://wiki.xuggle.com/Concepts). Изменение позиции в файле будет происходить быстрее, но там могут быть свои приколы или вообще этот способ может не работать.
Самый лучший вариант - это воспользоваться возможностями контейнера avi, mkv, mp4 и переместиться в позицию близкой к заданной ползунком. В Xuggle это, как я понял, seekKeyFrame, но надо разбираться с его использованием. Примеров в нете как-то мало. Можно глянуть на:
http://code.google.com/p/xuggle/source/browse/trunk/java/xuggle-xuggler/test/src/com/xuggle/xuggler/ContainerSeekExhaustiveTest.java?r=1018
http://code.google.com/p/xuggle/source/browse/trunk/java/xuggle-xuggler/test/src/com/xuggle/xuggler/ContainerTest.java?r=1026
http://pastebin.com/dN908Fhj
http://jpcsp.googlecode.com/svn-history/r2257/trunk/src/jpcsp/GUI/UmdVideoPlayer.java
https://github.com/mconf/bbbot/blob/master/bot/src/main/java/org/mconf/bbb/bot/XugglerFlvReader.java Но не знаю работающие ли они...
И, думаю, стоит если есть время изменить программу и по возможности обойтись только одним потоком для видео и аудио, а не пересоздавать их заново. |
|
|
|
 |
|
|
Страница 2 из 2 На страницу Пред. 1, 2 |
Список форумов
-> Swing, AWT & SWT |
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|