91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android HTTP邊下邊播

發布時間:2020-07-19 15:43:30 來源:網絡 閱讀:13004 作者:Jhuster 欄目:移動開發

本文簡單地分享一下在Android平臺做HTTP邊下載邊播放的一些經驗,希望對初學者有所幫助。


1. 為什么播放器在播放視頻文件的時候,都知道該怎么去解碼、該以怎樣的時間間隔去顯示每一幀呢?


因為無論是mp4、avi、flv、mkv還是其他格式的音視頻文件,都存在一個稱為metadata的數據塊,記錄了當前文件的圖像尺寸、編碼格式、幀率、碼率等信息,播放器可以通過解析metadata得到這些信息。


2. 迅雷邊下邊播的原理是怎樣的?


迅雷在邊下邊播的時候,不會像往常一樣根據資源鏈接數優先排序進行亂序下載,而是會首先去下載含有metedata的數據塊,從而配置好×××和顯示間隔等邏輯,然后保證至少有一個線程順序地獲取/下載即將播放的數據塊,從而實現邊下邊播。


3. Android中如何實現邊下邊播?


Android的VideoView是支持http協議的邊下邊播的,只需要將遠程http服務器上的視頻文件的HTTP URL地址通過 VideoView.setVideoPath 傳進去,start之后VideoView就會直接邊下載邊解碼播放了。


不過VideoView支持的視頻格式有限,一般只支持mp4、3gp、avi格式


因此,你也可以直接通過"HTTP GET"請求進行文件下載,得到文件的metedata之后,解析出該文件的編碼、幀率等信息(例如:mp4碼流的話,可以通過《Android中如何提取和生成mp4文件》這篇文章提供的方法進行音視頻數據的解耦),然后邊下載邊送入軟/硬×××進行解碼,最后通過SurfaceView將解碼后的數據顯示出來,比較復雜,相當于自己做流媒體播放器了。


4. 需要注意的坑


(1) 不是所有的mp4文件都支持通過HTTP協議邊下邊播,因為有的mp4文件的metadata數據塊在文件尾部,只有下載完整個文件之后才能成功解析。


注:對于metadata數據塊在文件尾部的mp4文件,可以通過ffmpeg的qt-faststart工具來轉換,或者直接使用如下ffmpeg命令將metadata轉移到文件頭部,從而支持邊下載邊播放。


ffmpeg -i input.mp4 -movflags faststart output.mp4


(2)如果自己通過http GET請求邊下載邊解碼播放的話,則需要注意,音視頻數據的實時傳輸顯示與普通文件的傳輸有很大的不同,接收到文件數據流可以立馬寫磁盤,但是接收到一幀音視頻數據則必須根據時間戳來決定何時送入×××解碼以及顯示,沒到時間,就得sleep,否則的話,播放過程會因為網絡抖動而出現卡頓現象。


注:一般情況下,兩幀視頻的時間間隔 = 1000/幀率


5. 小結


關于Android中做HTTP邊下邊播的一些經驗就分享到這里了,有任何疑問或者建議歡迎留言或者來信lujun.hust@gmail.com交流,或者關注我的新浪微博 @盧_俊 獲取最新的文章和資訊。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

昭平县| 宜春市| 榕江县| 邓州市| 怀安县| 上蔡县| 获嘉县| 宜春市| 松原市| 庆元县| 井冈山市| 龙泉市| 左云县| 曲阳县| 石林| 巴中市| 漳州市| 西平县| 建阳市| 那坡县| 黄龙县| 闸北区| 乌鲁木齐县| 巴楚县| 苍南县| 耒阳市| 平武县| 昆明市| 麦盖提县| 曲阜市| 高碑店市| 丽水市| 南汇区| 上虞市| 乐亭县| 靖宇县| 伊吾县| 凯里市| 吉首市| 彭泽县| 鄂托克旗|