Отложенное рисование поверхности Android MediaPlayer приводит к несинхронизации видео - PullRequest
0 голосов
/ 26 октября 2011

Я транслирую видео на мой Motorola Droid 1, используя метод из учебника по Android здесь .Я получаю разное поведение в двух разных форматах, в которые я хотел бы поиграть.Первый тип (youtube lq 3gp) играет нормально.Второй тип (youtube hq mp4) начнет воспроизводить звук до того, как будут запущены функции TIOverlay (поэтому нет видео), затем, когда видео отрисовано, оно не синхронизировано со звуком.Я знаю, что формат hq mp4 поддерживается моим телефоном, потому что это тип, который воспроизводит мобильный сайт YouTube, который работает нормально.Больше информации о форматах здесь .

Так что я думаю, мне либо нужен способ заставить работать TIOverlay, либо способ прослушать его, чтобы он был готов, а не запускать видеодо этого момента.Некоторые выходные данные logcat ниже показывают поток, это интересно, когда onPrepared () вызывается в обоих случаях.Кажется, что 3gp выполняет вызовы TIOverlay до и после onPrepared (), в то время как mp4 делает их только после.

Редактировать: Похоже, тот же код работает на Motorola Droid 3. Тем не менее, если этот формат видео работаетна YouTube на моем Droid 1, я чувствую, что это должно работать и в моем приложении.Я пытался подождать, чтобы воспроизвести видео, пока оно немного не буферизовалось.Это не только не решило проблему, но также запустил буфер при запуске видео.

3GP:

10-25 16:56:26.750: DEBUG/TIOverlay(1103): overlay_createOverlay:IN w=176 h=144 format=22
10-25 16:56:26.946: INFO/Overlay(1103): v4l2_overlay_init:: w=480 h=854
10-25 16:56:26.946: INFO/Overlay(1103): v4l2_overlay_init:: w=176 h=144
10-25 16:56:26.946: INFO/Overlay(1103): v4l2_overlay_init:: w=176 h=144
10-25 16:56:26.961: INFO/Overlay(1103): 8 buffers allocated 4 requested
10-25 16:56:26.961: INFO/Overlay(1103): buffer cookie is 2
10-25 16:56:26.961: INFO/TIOverlay(1103): Opened video1/fd=138/obj=003a2160/shm=135/size=4096
10-25 16:56:26.961: DEBUG/TIOverlay(1103): overlay_createOverlay: OUT
10-25 16:56:26.961: INFO/TIOverlay(1103): Nothing to do!
10-25 16:56:26.969: INFO/Overlay(1014): query buffer, mem=1 type=2 index=0
10-25 16:56:26.969: INFO/Overlay(1014): query buffer, mem=1 type=2 index=1
10-25 16:56:26.969: INFO/Overlay(1014): query buffer, mem=1 type=2 index=2
10-25 16:56:26.969: INFO/Overlay(1014): query buffer, mem=1 type=2 index=3
10-25 16:56:26.969: INFO/Overlay(1014): query buffer, mem=1 type=2 index=4
10-25 16:56:26.969: INFO/Overlay(1014): query buffer, mem=1 type=2 index=5
10-25 16:56:26.969: INFO/Overlay(1014): query buffer, mem=1 type=2 index=6
10-25 16:56:26.969: INFO/Overlay(1014): query buffer, mem=1 type=2 index=7
10-25 16:56:26.969: INFO/Overlay(1014): query buffer, mem=1 type=2 index=0
10-25 16:56:26.969: INFO/TIOverlay(1014): Buffer/0/addr=4140a000/len=53248
10-25 16:56:26.969: INFO/Overlay(1014): query buffer, mem=1 type=2 index=1
10-25 16:56:26.969: INFO/TIOverlay(1014): Buffer/1/addr=41417000/len=53248
10-25 16:56:26.969: INFO/Overlay(1014): query buffer, mem=1 type=2 index=2
10-25 16:56:26.969: INFO/TIOverlay(1014): Buffer/2/addr=41424000/len=53248
10-25 16:56:26.969: INFO/Overlay(1014): query buffer, mem=1 type=2 index=3
10-25 16:56:26.969: INFO/TIOverlay(1014): Buffer/3/addr=41431000/len=53248
10-25 16:56:26.969: INFO/Overlay(1014): query buffer, mem=1 type=2 index=4
10-25 16:56:26.969: INFO/TIOverlay(1014): Buffer/4/addr=4143e000/len=53248
10-25 16:56:26.969: INFO/Overlay(1014): query buffer, mem=1 type=2 index=5
10-25 16:56:26.969: INFO/TIOverlay(1014): Buffer/5/addr=4144b000/len=53248
10-25 16:56:26.977: DEBUG/TI_Video_Decoder(1014): VIDDEC_SendCommand: Received request from omx client to change state to 2
10-25 16:56:26.985: DEBUG/TI_Video_Decoder(1014): Handle request for state transition: 1 => OMX_StateIdle
10-25 16:56:26.985: DEBUG/d(2220): videosizechanged()
10-25 16:56:27.102: DEBUG/TI_Video_Decoder(1014): OMX_StateIdle state reached
10-25 16:56:27.305: INFO/PlayerDriver(1014): buffering (15)
10-25 16:56:28.235: DEBUG/TI_Video_Decoder(1014): VIDDEC_SendCommand: Received request from omx client to change state to 3
10-25 16:56:28.243: WARN/MediaPlayer(2220): info/warning (1, 44)
10-25 16:56:28.258: INFO/MediaPlayer(2220): Info (1,44)
10-25 16:56:28.258: DEBUG/d(2220): onPrepared()
10-25 16:56:28.282: VERBOSE/BufferAllocOmap34xx(1014): BufferAllocOmap34xx::removeRef()
10-25 16:56:28.290: INFO/Overlay(1014): v4l2_overlay_init:: w=176 h=144
10-25 16:56:28.290: INFO/Overlay(1014): v4l2_overlay_init:: w=176 h=144
10-25 16:56:28.290: INFO/Overlay(1014): v4l2_overlay_init:: w=176 h=144
10-25 16:56:28.290: INFO/Overlay(1014): 8 buffers allocated 4 requested
10-25 16:56:28.290: INFO/Overlay(1014): buffer cookie is 2
10-25 16:56:28.290: INFO/Overlay(1014): query buffer, mem=1 type=2 index=0
10-25 16:56:28.290: INFO/Overlay(1014): query buffer, mem=1 type=2 index=1
10-25 16:56:28.290: INFO/Overlay(1014): query buffer, mem=1 type=2 index=2
10-25 16:56:28.290: INFO/Overlay(1014): query buffer, mem=1 type=2 index=3
10-25 16:56:28.290: INFO/Overlay(1014): query buffer, mem=1 type=2 index=4
10-25 16:56:28.290: INFO/Overlay(1014): query buffer, mem=1 type=2 index=5
10-25 16:56:28.290: INFO/Overlay(1014): query buffer, mem=1 type=2 index=6
10-25 16:56:28.290: INFO/Overlay(1014): query buffer, mem=1 type=2 index=7
10-25 16:56:28.297: INFO/TIOverlay(1014): Postponing Stream Enable/1/0
10-25 16:56:28.297: INFO/Overlay(1014): query buffer, mem=1 type=2 index=0
10-25 16:56:28.297: INFO/TIOverlay(1014): Buffer/0/addr=4140a000/len=53248
10-25 16:56:28.297: INFO/Overlay(1014): query buffer, mem=1 type=2 index=1
10-25 16:56:28.297: INFO/TIOverlay(1014): Buffer/1/addr=41417000/len=53248
10-25 16:56:28.297: INFO/Overlay(1014): query buffer, mem=1 type=2 index=2
10-25 16:56:28.297: INFO/TIOverlay(1014): Buffer/2/addr=41424000/len=53248
10-25 16:56:28.297: INFO/Overlay(1014): query buffer, mem=1 type=2 index=3
10-25 16:56:28.297: INFO/TIOverlay(1014): Buffer/3/addr=41431000/len=53248
10-25 16:56:28.297: INFO/Overlay(1014): query buffer, mem=1 type=2 index=4
10-25 16:56:28.297: INFO/TIOverlay(1014): Buffer/4/addr=4143e000/len=53248
10-25 16:56:28.297: INFO/Overlay(1014): query buffer, mem=1 type=2 index=5
10-25 16:56:28.297: INFO/TIOverlay(1014): Buffer/5/addr=4144b000/len=53248
10-25 16:56:28.891: DEBUG/dalvikvm(2050): GC_EXPLICIT freed 2271 objects / 138840 bytes in 229ms
10-25 16:56:28.966: INFO/PlayerDriver(1014): buffering (15)
10-25 16:56:29.930: WARN/MediaPlayer(2220): info/warning (1, 44)
10-25 16:56:30.258: INFO/TIOverlay(1103): Position/X0/Y0/W0/H0
10-25 16:56:30.258: INFO/TIOverlay(1103): Adjusted Position/X0/Y200/W480/H0
10-25 16:56:30.258: INFO/TIOverlay(1103): Rotation/0
10-25 16:56:30.266: INFO/Overlay(1103): v4l2_overlay_set_position:: w=480 h=854
10-25 16:56:30.266: INFO/Overlay(1103): v4l2_overlay_set_position:: w=480 h=392
10-25 16:56:30.266: INFO/Overlay(1103): dumping driver state:
10-25 16:56:30.266: INFO/Overlay(1103): output pixfmt:
10-25 16:56:30.266: INFO/Overlay(1103): w: 176
10-25 16:56:30.266: INFO/Overlay(1103): h: 144
10-25 16:56:30.266: INFO/Overlay(1103): color: 7
10-25 16:56:30.266: INFO/Overlay(1103): UYVY
10-25 16:56:30.266: INFO/Overlay(1103): v4l2_overlay window:
10-25 16:56:30.266: INFO/Overlay(1103): window l: 0 
10-25 16:56:30.266: INFO/Overlay(1103): window t: 200 
10-25 16:56:30.266: INFO/Overlay(1103): window w: 480 
10-25 16:56:30.266: INFO/Overlay(1103): window h: 392
10-25 16:56:30.266: INFO/Overlay(1103): output crop:
10-25 16:56:30.266: INFO/Overlay(1103): crop l: 0 
10-25 16:56:30.266: INFO/Overlay(1103): crop t: 0 
10-25 16:56:30.266: INFO/Overlay(1103): crop w: 176 
10-25 16:56:30.266: INFO/Overlay(1103): crop h: 144
10-25 16:56:30.274: DEBUG/d(2220): surfaceChanged()
10-25 16:56:30.297: DEBUG/d(2220): videosizechanged()

MP4:

10-25 16:51:57.454: DEBUG/d(2071): onPrepared()
10-25 16:51:58.360: DEBUG/d(2071): surfaceChanged()
10-25 16:52:02.219: DEBUG/TIOverlay(1103): overlay_createOverlay:IN w=640 h=360 format=22
10-25 16:52:02.219: INFO/Overlay(1103): v4l2_overlay_init:: w=480 h=854
10-25 16:52:02.219: INFO/Overlay(1103): v4l2_overlay_init:: w=640 h=360
10-25 16:52:02.219: INFO/Overlay(1103): v4l2_overlay_init:: w=640 h=360
10-25 16:52:02.243: INFO/Overlay(1103): 8 buffers allocated 4 requested
10-25 16:52:02.243: INFO/Overlay(1103): buffer cookie is 2
10-25 16:52:02.250: INFO/TIOverlay(1103): Opened video1/fd=139/obj=00501e18/shm=108/size=4096
10-25 16:52:02.250: DEBUG/TIOverlay(1103): overlay_createOverlay: OUT
10-25 16:52:02.250: INFO/TIOverlay(1103): Position/X0/Y0/W0/H0
10-25 16:52:02.250: INFO/TIOverlay(1103): Adjusted Position/X0/Y200/W480/H0
10-25 16:52:02.250: INFO/TIOverlay(1103): Rotation/0
10-25 16:52:02.250: INFO/Overlay(1103): v4l2_overlay_set_position:: w=480 h=854
10-25 16:52:02.250: INFO/Overlay(1103): v4l2_overlay_set_position:: w=480 h=270
10-25 16:52:02.250: INFO/Overlay(1103): dumping driver state:
10-25 16:52:02.250: INFO/Overlay(1103): output pixfmt:
10-25 16:52:02.250: INFO/Overlay(1103): w: 640
10-25 16:52:02.250: INFO/Overlay(1103): h: 360
10-25 16:52:02.250: INFO/Overlay(1103): color: 7
10-25 16:52:02.250: INFO/Overlay(1103): UYVY
10-25 16:52:02.250: INFO/Overlay(1103): v4l2_overlay window:
10-25 16:52:02.250: INFO/Overlay(1103): window l: 0 
10-25 16:52:02.250: INFO/Overlay(1103): window t: 200 
10-25 16:52:02.250: INFO/Overlay(1103): window w: 480 
10-25 16:52:02.250: INFO/Overlay(1103): window h: 270
10-25 16:52:02.250: INFO/Overlay(1103): output crop:
10-25 16:52:02.250: INFO/Overlay(1103): crop l: 0 
10-25 16:52:02.250: INFO/Overlay(1103): crop t: 0 
10-25 16:52:02.250: INFO/Overlay(1103): crop w: 640 
10-25 16:52:02.250: INFO/Overlay(1103): crop h: 360
10-25 16:52:02.250: INFO/TIOverlay(1103): Postponing Stream Enable/1/0
10-25 16:52:02.266: INFO/Overlay(1014): query buffer, mem=1 type=2 index=0
10-25 16:52:02.266: INFO/Overlay(1014): query buffer, mem=1 type=2 index=1
10-25 16:52:02.266: INFO/Overlay(1014): query buffer, mem=1 type=2 index=2
10-25 16:52:02.266: INFO/Overlay(1014): query buffer, mem=1 type=2 index=3
10-25 16:52:02.266: INFO/Overlay(1014): query buffer, mem=1 type=2 index=4
10-25 16:52:02.274: INFO/Overlay(1014): query buffer, mem=1 type=2 index=5
10-25 16:52:02.274: INFO/Overlay(1014): query buffer, mem=1 type=2 index=6
10-25 16:52:02.274: INFO/Overlay(1014): query buffer, mem=1 type=2 index=7
10-25 16:52:02.282: INFO/Overlay(1014): query buffer, mem=1 type=2 index=0
10-25 16:52:02.282: INFO/TIOverlay(1014): Buffer/0/addr=420f1000/len=462848
10-25 16:52:02.282: INFO/Overlay(1014): query buffer, mem=1 type=2 index=1
10-25 16:52:02.282: INFO/TIOverlay(1014): Buffer/1/addr=4269d000/len=462848
10-25 16:52:02.282: INFO/Overlay(1014): query buffer, mem=1 type=2 index=2
10-25 16:52:02.282: INFO/TIOverlay(1014): Buffer/2/addr=4270e000/len=462848
10-25 16:52:02.282: INFO/Overlay(1014): query buffer, mem=1 type=2 index=3
10-25 16:52:02.282: INFO/TIOverlay(1014): Buffer/3/addr=4277f000/len=462848
10-25 16:52:02.282: INFO/Overlay(1014): query buffer, mem=1 type=2 index=4
10-25 16:52:02.282: INFO/TIOverlay(1014): Buffer/4/addr=427f0000/len=462848
10-25 16:52:02.282: INFO/Overlay(1014): query buffer, mem=1 type=2 index=5
10-25 16:52:02.282: INFO/TIOverlay(1014): Buffer/5/addr=42861000/len=462848
10-25 16:52:02.282: INFO/Overlay(1014): query buffer, mem=1 type=2 index=6
10-25 16:52:02.282: INFO/TIOverlay(1014): Buffer/6/addr=428d2000/len=462848
10-25 16:52:02.282: INFO/Overlay(1014): query buffer, mem=1 type=2 index=7
10-25 16:52:02.289: INFO/TIOverlay(1014): Buffer/7/addr=42943000/len=462848

1 Ответ

0 голосов
/ 29 октября 2011

Кажется, я решил проблему. Мой подход состоял в том, чтобы посмотреть, работал ли он в простейшем виде (скопировал пример кода на сайте Android), и, конечно же, сделал. Затем я медленно встроил его в текущие функциональные возможности приложений, и он все еще работает. К сожалению, я не смог определить точную причину, хотя в своей первой реализации я не использовал точный код с сайта Android в качестве основы. Кажется, что многие вещи могут вызвать эту проблему, в том числе поиск по запросу перед запуском видео, чтобы назвать только одну. Всем, кто сталкивается с ошибкой «аудио, но нет видео», я рекомендую воспользоваться этим подходом, начав с самой простой реализации и вернувшись назад.

...