現在手上有兩個鏈接
(1) http://202.108.16.173/cctv/video/8C/35/EB/E8/8C35EBE84E7B483C8741CF9A60154993/gphone/480_320/200/0.mp4
(2) http://202.108.16.173/cctv/video/8C/35/EB/E8/8C35EBE84E7B483C8741CF9A60154993/iphone/480_320/200/0.mp4
現在的情況是這樣的:
|
1.(1)在android中可以播放,(2)不能播放
2.在android中把視頻下載下來,都可以播放。
3.在pc上用vlc測試兩個鏈接,(1)播放幾秒后卡住不動,(2)流暢播放。(ps:網速不是問題)
把兩個文件都下載下來,頭部分如下:
(1)ftypisom isomiso2avc1mp41 遞moov lmvhd |%皜|%皜 ?摢
(2)ftypisom isomiso2avc1mp41 free 0⑸mdat? libfaac 1.28 B ?2 G
現在想要知道(2)這個鏈接為什么不能播放。跟蹤了android的代碼,發現在http協議播放MP4的時候,需要moov這個atom,否則報錯退出,但是在以文件形式播放的時候沒有這項判斷。
想問下這兩個鏈接的播放方式有什么不同,為什么在android上的播放和在vlc上的播放都出現不同的結果?
psusong | 2009-12-31 10:18 |
實際情況是播放mp4的時候必須首先獲得moov的數據,否則沒法解析mdat中的audio/video數據 對於2的情況,是因為moov在mdat后面,也就是在文件末尾,要播放這個文件意味要先把mdat下載下來才能下載到moov,也就是說沒法直接獲得moov,所以不能通過http的方式在線播放這個文件 並不是以文件的形式就不判斷moov了,而是文件形式下moov無論在文件頭還是文件尾部播放器都可以instant獲得moov的數據,而http的方式下不能隨意的seek到文件尾部,所以也就無法立即獲得moov數據,當然無法播放了 |