前几天在研究用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就要好一些。