前幾天在研究用android 播放網絡視頻的方法,回想起來實在是一件簡單不過的事情,就幾句代碼,不過用了我兩天時間,走了好多彎路。
首先,是手機問題,本來代碼就那幾句,寫好了在手機上運行,提示“無法播放此文件”,開始是用網絡上別人曾經用的鏈接,又百度了好多參考資料,得到的答案就是視頻格式不對或是找不到文件。所以開始懷疑是地址無效,又找了好多其它的地址來試,結果還是不行,最后干脆自已架設一個本地服務器,參考了網上架構rtsp 服務器的方法,下載helix server 后卻無法安裝,懷疑是win7問題,發到xp電腦上安裝,安裝成功,在瀏覽器上輸入rtsp地址后可以調用realplay播放,於是在代碼里面換成這個地址,還是不行,真是見鬼,又百度了好多別人寫的代碼,各種寫法都試了,還是不行,報的異常非常模糊,在網上找不到解決辦法。第二天,仔細想想有哪些地方設置不對,首先internet權限是加了,也沒有什么東西要加的了,突然想起在公司用wifi時有設置過手機的ip地址,於時查看了一下,在WANL 那里“高級”菜單看到果然是以前公司網的ip,把它改了過來,嘗試還是不行,但再試了其它的網絡地址,有的是可以播放了,但有的又不可以,到底是什么原因呢?android原系統只支持3gp和mp4格式,我也是只用這些格式啊,為什么有的行,有的又不行呢?最后搜到了一個答案,說是視頻的文件頭的問題,需要在視頻添加rtsp文件頭,於是用mp4box 添加了rtsp文件頭,果然成功。
另外還測試了http協試,發現http傳輸還比rtsp的快,也不知道是什么原因,並且服務器就用tomcat就行了,也能達到rtsp的效果。
再說說其它的細節,播放視頻的控件可以用videoview 也可以用surfaceview ,差別就是 videoview會自動加載播放控制按鈕,顯示的尺寸會根據原視頻大小來顯示,如果要自已要用自已設計的播放按鈕及界面,用surfaceview就要好一些。