我使用android教程here中的方法將視頻流式傳輸到我的Motorola Droid 1。我從我想玩的兩種不同格式中獲得不同的行爲。第一種類型(youtube lq 3gp)播放良好。第二種類型(youtube hq mp4)將在TIOverlay功能運行之前開始播放音頻(因此無視頻),然後一旦視頻被繪製,就會與音頻不同步。我知道我的手機支持hq mp4格式,因爲它是移動版YouTube網站播放的類型,效果很好。有關格式here的更多信息。Android MediaPlayer延遲表面繪製導致視頻不同步
所以我想我需要一種強制TIOverlay運行的方法,或者一種方法來監聽它是否準備就緒,並且不要在此之前啓動視頻。下面的一些logcat輸出顯示了流程,在兩種情況下調用onPrepared()時都很有趣。 3gp似乎在onPrepared()之前和之後執行TIOverlay調用,而mp4僅在之後執行。
編輯:相同的代碼似乎在摩托羅拉Droid 3上工作。但是,如果該視頻格式在我的Droid 1的YouTube上工作,我覺得它也應該在我的應用程序中工作。 我試圖等待播放視頻,直到它被緩衝一點點。這不但不能解決問題,而且緩衝區在啓動視頻時也會重新啓動。
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