2011-10-25 41 views
0

我使用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 

回答

0

我似乎已經解決了這一問題。我的方法是查看它是否以最簡單的形式工作(在Android網站上覆制了example code),並且確實如此。然後,我慢慢將其構建到應用程序當前的功能,並且仍然有效。不幸的是,我無法確定確切的原因,儘管在我的第一個實現中,我沒有使用android站點的確切代碼作爲基礎。看起來很多事情都可能導致這個問題,包括在開始播放視頻之前做一個seekTo命名爲一個。任何其他經歷「音頻但無視頻」錯誤的人,我建議採取這種從最簡單的實現開始並且恢復工作的方法。