Harinlen / cuberok

Automatically exported from code.google.com/p/cuberok
GNU General Public License v3.0
0 stars 1 forks source link

ffmpeg flac #54

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
С плагином player_ffmpeg проигрыватель не 
воспроизводит flac. Это странно, 
учитывая, что вообще говоря должен даже ape 
работать. В консоль пишет так:

[flac @ 0x859b840]buffer smaller than AVCODEC_MAX_AUDIO_FRAME_SIZE

В окно сообщений пишет так:
Tue Jun 30 19:37:58 2009 Add URL: file:///home/combine/.cuberok/Playlist 
1.xspf 46 record(s)
Tue Jun 30 19:37:58 2009 Database ready
Tue Jun 30 19:37:58 2009 User select engine: FFmpeg
Tue Jun 30 19:37:58 2009 Selected engine: GStreamer
Tue Jun 30 19:37:58 2009 file:///home/vasya/music/song/123.mp3
Tue Jun 30 19:37:58 2009 /home/vasya/music/song\123.mp3
Tue Jun 30 19:37:58 2009 /home/vasya/music/song\123.mp3
Tue Jun 30 19:37:58 2009 file:///home/vasya/music/song\123.mp3

Про ape пишет так:
[ape @ 0x86469c0]Too long 'j' tag was truncated.
[ape @ 0x86deab0]buffer smaller than AVCODEC_MAX_AUDIO_FRAME_SIZE
 - то же самое в принципе. Может, надо что-то ещё скомпилять? mplayer 
играет всё. Если выбрать плагин gstreamer, то 
cuberok тоже играет ape.

Cuberok v 0.0.10
build: 19:19:32 Jun 30 2009
Qt: 4.5.1 X11
Current plugin: GStreamer
Available plugins are:
Null engine
FFmpeg
GStreamer
Phonon
FFmpeg version 0.5, Copyright (c) 2000-2009 Fabrice Bellard, et al.
  configuration: --prefix=/usr --libdir=/usr/lib --shlibdir=/usr/lib --
mandir=/usr/share/man --enable-static --enable-shared --cc=gcc --disable-
debug --disable-ffplay --disable-encoders --enable-libdc1394 --disable-
demuxer=oss --disable-muxer=oss --enable-x11grab --enable-pthreads --
enable-libdirac --enable-libschroedinger --disable-altivec --disable-mmx2 
--cpu=native --disable-vhook --enable-gpl --enable-postproc --enable-
avfilter --enable-avfilter-lavf --enable-swscale --disable-stripping

Original issue reported on code.google.com by nomen.in...@gmail.com on 30 Jun 2009 at 3:44

GoogleCodeExporter commented 9 years ago
Играть то оно начало, тока seek у меня на flac ни 
в какую не идёт, виснет или падает.
На ape не проверял ещё

r237

Original comment by drmoriar...@gmail.com on 1 Jul 2009 at 1:45

GoogleCodeExporter commented 9 years ago
К сожалению, боюсь, что у меня оно играть не 
начало:

../../src/player_ffmpeg.cpp:330: ошибка: целая константа 
слишком велика для типа 
‘long’
../../src/player_ffmpeg.cpp:343: ошибка: целая константа 
слишком велика для типа 
‘long’

Original comment by nomen.in...@gmail.com on 1 Jul 2009 at 1:47

GoogleCodeExporter commented 9 years ago
быстрофикс r238

Original comment by drmoriar...@gmail.com on 1 Jul 2009 at 2:11

GoogleCodeExporter commented 9 years ago
Странно, не помогло...

Original comment by nomen.in...@gmail.com on 1 Jul 2009 at 3:10

GoogleCodeExporter commented 9 years ago
> На ape не проверял ещё

На ape "квакает", как будто не успевает читать 
файл.

Original comment by nomen.in...@gmail.com on 1 Jul 2009 at 3:40

GoogleCodeExporter commented 9 years ago
> Странно, не помогло...

В интернетах говорят, что это из-за того, 
что ffmpeg написан на C, а не на C++
Попробовал рекомендуемый метод 
http://forum.motama.com/viewtopic.php?t=12 (там два 
метода, результат одинаковый) - компиляется 
но при воспроизведении виснет на seek

Original comment by nomen.in...@gmail.com on 2 Jul 2009 at 7:32

GoogleCodeExporter commented 9 years ago
То, что оно виснет, это ожидаемо...

Покажи дифф при котором компиляется 
корректно, внесу в svn

Original comment by drmoriar...@gmail.com on 2 Jul 2009 at 7:53

GoogleCodeExporter commented 9 years ago
На прямую мой дифф вносить не стоит, потому 
что при компиляции появляется такая ругань:

../../src/player_ffmpeg.cpp:332: предупреждение: 
сравнение знакового и беззнакового 
целых выражений
../../src/player_ffmpeg.cpp:345: предупреждение: 
сравнение знакового и беззнакового 
целых выражений

Кроме того, я не уверен, нужна ли строка
#undef __STDC_CONSTANT_MACROS
да и вообще, для меня это тёмный лес

Выглядит примерно так:
Index: player_ffmpeg.pro
===================================================================
--- player_ffmpeg.pro   (revision 238)
+++ player_ffmpeg.pro   (working copy)
@@ -1,7 +1,9 @@
  CONFIG       += release
  TEMPLATE      = lib
  CONFIG       += plugin
- INCLUDEPATH  += ../../src
+ INCLUDEPATH  += ../../src \
+       /usr/include/libavcodec/ \
+       /usr/include/libavformat/
  HEADERS       = ../../src/player_ffmpeg.h \
                  ../../src/player.h
  SOURCES       = ../../src/player_ffmpeg.cpp

$ svn diff ../../src/player_ffmpeg.cpp
Index: ../../src/player_ffmpeg.cpp
===================================================================
--- ../../src/player_ffmpeg.cpp (revision 238)
+++ ../../src/player_ffmpeg.cpp (working copy)
@@ -16,16 +16,13 @@
  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  * Boston, MA 02111-1307, USA.
  */
-
+#define __STDC_CONSTANT_MACROS 1
 #include "player_ffmpeg.h"
+#undef __STDC_CONSTANT_MACROS
 #include <SDL.h>
 #include <SDL_audio.h>

 #define SDL_AUDIO_BUFFER_SIZE 1024
-#ifdef WIN32
-#define localAV_NOPTS_VALUE int64_t(0x8000000000000000)
-#else
-#define localAV_NOPTS_VALUE AV_NOPTS_VALUE
 #endif

 Q_EXPORT_PLUGIN2(player_ffmpeg, PlayerFfmpeg)
@@ -332,7 +329,7 @@
                        }
         } while(packet.stream_index!=audioStream);

-               if(packet.pts != localAV_NOPTS_VALUE)
+               if(packet.pts != AV_NOPTS_VALUE)
                        curts = packet.pts;
                if(stopts && curts >= stopts) {
                        if(packet.data!=NULL)
@@ -345,7 +342,7 @@
         rawData=packet.data;
     }
 frame_unpacked:
-       if(packet.pts == localAV_NOPTS_VALUE) {
+       if(packet.pts == AV_NOPTS_VALUE) {
                curts += audio_buf_ptr / 2 / pCodecCtx->channels;
        }

Original comment by nomen.in...@gmail.com on 2 Jul 2009 at 10:45

GoogleCodeExporter commented 9 years ago
И, кстати, на seek виснет не только на flac, но и 
на mp3 и на ogg/vorbis

Original comment by nomen.in...@gmail.com on 2 Jul 2009 at 10:51

GoogleCodeExporter commented 9 years ago
> + INCLUDEPATH  += ../../src \
> +       /usr/include/libavcodec/ \
> +       /usr/include/libavformat/

PKGCONFIG не сработал? или в генту как то не так?

Добавил специально для flac другой режим seek. 
Там щас не совсем совпадает время (у
меня позиционирует чуть дальше чем надо) 
интересует разброс на разных флаках
r239

Original comment by drmoriar...@gmail.com on 3 Jul 2009 at 10:27

GoogleCodeExporter commented 9 years ago
> PKGCONFIG не сработал? или в генту как то не так?
Честно говоря, не понимаю, почему возникает 
проблема, поэтому не стал репортить. Вот 
для сравнения как он отработал для phonon и 
для lavc

name_no@name_no_new: ~ $ pkg-config --libs phonon
-L/usr/lib/qt4 -lphonon -lQtGui -lQtDBus -lQtXml -lQtCore
name_no@name_no_new: ~ $ pkg-config --libs libavcodec
-lavcodec
name_no@name_no_new: ~ $ locate avcodec.h
/usr/include/libavcodec/avcodec.h

Ещё для сравнения, SDL:
name_no@name_no_new: ~ $ pkg-config --libs sdl
-lSDL -lpthread
name_no@name_no_new: ~ $ locate SDL.h
/usr/include/SDL/SDL.h

Original comment by nomen.in...@gmail.com on 3 Jul 2009 at 10:58

GoogleCodeExporter commented 9 years ago
Интересно, что вот такой "патч" решает мою 
проблему. Видимо, гента виновата ))

 # ln -s /usr/include/libavcodec/ /usr/include/avcodec
 # ln -s /usr/include/libavformat/ /usr/include/avformat

Дома ещё на дебиане посмотрю.

Original comment by nomen.in...@gmail.com on 6 Jul 2009 at 9:49

GoogleCodeExporter commented 9 years ago
> Интересно, что вот такой "патч" решает мою 
проблему.

А, нет, не решает, поспешил я

Original comment by nomen.in...@gmail.com on 6 Jul 2009 at 9:59

GoogleCodeExporter commented 9 years ago
На рабочем компе есть проблемы с seek на 
mp3-файлах, на домашнем, вроде, такой 
проблемы нет. flac не воспроизводится на 
обоих компах.

Версии всего одинаковые, разницы в 
use-флагах. 
дома:
3dnow 3dnowext X alsa amr bindist dirac ieee1394 ipv6 mmx mp3 network 
schroedinger 
ssse3 theora threads v4l v4l2 vorbis x264 xvid zlib -altivec -custom-cflags 
-debug -
doc -encode -faac -faad -gsm -hardcoded-tables -jpeg2k -mmxext -oss -sdl -speex 
-
test -vhook

на работе:
3dnowext X alsa encode ipv6 mmx mmxext mp3 network ssse3 theora threads vorbis 
xvid 
zlib -3dnow -altivec -amr -bindist -custom-cflags -debug -dirac -doc -faac 
-faad -
gsm -hardcoded-tables -ieee1394 -jpeg2k -oss -schroedinger -sdl -speex -test 
-v4l -
v4l2 -vhook -x264

// Кстати, хотел же разобраться, кто мне 3dnow 
включил...

Original comment by nomen.in...@gmail.com on 7 Jul 2009 at 6:38

GoogleCodeExporter commented 9 years ago
а ещё с этим плагином очень интересную 
фигню замечаю: как только появляется 
нагрузка 
на хард (не процессор, а именно на дисках, 
чтение) cuberok начинает запинаться. Не 
сильно и не долго, но заметно и неприятно. 
Может, кеш прикрутить?

Original comment by nomen.in...@gmail.com on 7 Jul 2009 at 6:48

GoogleCodeExporter commented 9 years ago
Итак:
Флак целым файлом воспроизводится, по cue 
пока нет.

Глюки:
Один и тот же флак на винде seek'ает примерно 
в 3 раза дальше, на дебе (версия 2008
02 06) примерно в полтора раза дальше. Сик 
работает в бинарном режиме, как его лечить
я пока не догоняю.

Интересует:
Какие будут ошибки seek на разных флаках, а 
ещё лучше на разных версиях ffmpeg

Original comment by drmoriar...@gmail.com on 9 Jul 2009 at 7:34

GoogleCodeExporter commented 9 years ago
А что у нас с ape? (у меня нету, тестить не на 
чем)

Original comment by drmoriar...@gmail.com on 9 Jul 2009 at 7:38

GoogleCodeExporter commented 9 years ago
> Интересует:
> Какие будут ошибки seek на разных флаках, а 
ещё лучше на разных версиях ffmpeg

На амароке я замечал, что неправильно 
выбирается новая позиция, если в файле есть 
тишина. Видимо, это каким-то образом 
связано с методом сжатия. Ещё замечал, что в 
mplayer flac с тишиной (полностью только тишина), 
длиной примерно в полторы минуты, 
воспроизводился всего долю секунды. Сейчас 
на генте при прокрутке флака в консоли 
пишет 
так:
[flac @ 0x9d8d930]qlevel -12 not supported, maybe buggy stream
[flac @ 0x9d8d930]decode_frame() failed
[flac @ 0x9d8d930]FRAME HEADER not here
Насчёт точности позиционирования на 
работе некогда )))

С ape ничего неизменилось
> Comment 5 by nomen.infitior, Jul 01, 2009 
> На ape "квакает", как будто не успевает 
читать файл.
Может, и не как будто не успевает, но как 
если часто включать выключать динамик 
(очень 
часто). И медленно играет.

тот самый, который квакает (десять метров):
http://g.imagehost.org/download/0898/Track11

Original comment by nomen.in...@gmail.com on 9 Jul 2009 at 8:10

GoogleCodeExporter commented 9 years ago
При воспроизведении флака ещё (видимо та же 
проблема, что и с seek) неправильно 
отображается время. Я запустил трек и за 15 
секунд реального прослушивания песенки на 
пололе прокрутки отображалось (00:00:08 / 00:03:03)

Original comment by nomen.in...@gmail.com on 9 Jul 2009 at 8:30

GoogleCodeExporter commented 9 years ago
> Я запустил трек и за 15 секунд реального 
прослушивания песенки на 
пололе прокрутки отображалось (00:00:08 / 00:03:03)

Мнится мне, что это и есть проблема, 
интерпретированная как "флак seek'ает 
примерно в 
3 раза дальше". Т.е. если судить по времени, 
отображённому на полосе прокрутки, он 
играет десятую секунду, а на самом деле он 
играет двадцатую.

Original comment by nomen.in...@gmail.com on 10 Jul 2009 at 6:27

GoogleCodeExporter commented 9 years ago
> Т.е. если судить по времени, отображённому 
на полосе прокрутки, он 
играет десятую секунду, а на самом деле он 
играет двадцатую.

И воспроизведение трека заканчивается 
ровно на середине прогрессбара. Наоборот, 
если 
сделать seek, то время, отображаемое на 
полосе прокрутки окажется больше того, что 
на 
самом деле играет и воспроизведение трека 
прекратится раньше, чем трек закончится. Во 
всяком случае, так у меня происходит сейчас.

Original comment by nomen.in...@gmail.com on 10 Jul 2009 at 6:44

GoogleCodeExporter commented 9 years ago
Для флака сделан "тупой" seek, то есть при 
перемещении вперёд поток раскодируется до
нужного места, при перемещении назад - 
поток сбрасывается в начало и 
раскодируется
опять же до нужного места.
На моём тестовом флаке позиция совпадает с 
желаемой, сик делается заметно долго
(последняя композиция в часовом флаке 
стартует ок. 5 секунд)

Если не придумается ничего лучше, то будет 
хоть так работать.
r278

Original comment by drmoriar...@gmail.com on 24 Jul 2009 at 8:41

GoogleCodeExporter commented 9 years ago
По описанию получается примерно то, что 
надо, но надо как-то оптимизировать ))

P.S. на моей gentoo сохраняется ситуация с 
неправильным отображением времени на 
прогрессбаре, в результате чего seek дальше 
середины трека стабильно приводит к 
переходу 
на следующий трек (flac потрековый).

Original comment by nomen.in...@gmail.com on 24 Jul 2009 at 9:41

GoogleCodeExporter commented 9 years ago
Вот эта проблема с отображением времени 
мне непонятна. На настоящий момент timestamp
вычисляется как объём пройденных 
аудиоданных делённый на количество 
каналов и ещё
делённый на 2 (ибо звук считается 16 битным)

В проблемном флаке каналов случайно не 
больше двух? или звук сильно не 16-ти битный?

Original comment by drmoriar...@gmail.com on 24 Jul 2009 at 11:39

GoogleCodeExporter commented 9 years ago
 $ file 01\ Holidays\ In\ The\ Sun.flac
01 Holidays In The Sun.flac: Audio file with ID3 version 23.0 tag, MP3 encoding

 $ kfile -av 01\ Holidays\ In\ The\ Sun.flac
01 Holidays In The Sun.flac: Звуковой файл FLAC (audio/x-flac)
-- /home/name_no/Музыка/Sex Pistols/Sex Pistols - Never Mind The Bollocks 
[Black 
Triangle Edition 32VD-1011]/01 Holidays In The Sun.flac
=All Values=
Comment:                 Album:                   Never Mind The Bollocks
Comment:                 Artist:                  Sex Pistols
Comment:                 Comment:                 Track 1
Comment:                 Date:                    1977
Comment:                 Genre:                   Punk Rock
Comment:                 Title:                   Holidays In The Sun
Comment:                 Track Number:            1

Technical Details:       Average Bitrate:         995  kbps
Technical Details:       Channels:                2
Technical Details:       Length:                  03:22
Technical Details:       Sample Rate:             44.100  Hz
Technical Details:       Sample Width:            16  bits

Но выглядит так, будто проблема и вправду в 
лишнем делении на два. Такая ерунда на 
всех треках. В идеале, конечно, точнее всего 
было бы по фреймам считать (см. 
замечание про amarok и mplayer)

Original comment by nomen.in...@gmail.com on 24 Jul 2009 at 12:17