大概看了一下你的程序,还没仔细分析,也不知道你的服务器端程序是什么样子,不过这边有几点提醒:
1.不知道你从服务器端传过来的数据到底是什么格式,如果是Bitmap对象的格式,估计一帧的大小不会是W*H*3,起码还有一些图片的头信息之类的,就像bitmap文件里面不会只存像素数据,还会有一些版本号,颜色表,长宽之类的数据。
2.bitmap得到null并不是说没有取到数据,很有可能是取到的数据不符合bitmap对象格式,你可以把收到的数据在转换成bitmap之前dump出来看看,跟服务器端发的数据是不是吻合。
3.综合1和2,第一帧能显示,是因为有bitmap文件头,虽然最后的像素数据不足,但是影响不大,第二帧黑屏很可能是把原来应该属于第一帧的最后的一些数据放到了第二帧的开头,造成认不了bitmap头,于是不能解析。至于第三帧为什么跟第一帧一样,还要再仔细分析你的程序,包括客户端的其他代码以及服务器端。
你说只是绘制一帧,那我和你说说视频播放的原理,视频数据获取就不说了,你得到了转换成每一帧的图片,然后一帧一帧的绘制形成动画(视频),那你说你现在只绘制了一帧,就看这一帧是开始的还是最后结束的,开始的话,那就说明你的循环绘制没起作用(可以自己加线程),问题的源头你就找到了,剩下的就自己解局了;如果是最后一帧,那就是你代码错了
...首先佩服楼主不怕内存泄露..
然后楼主你的代码里面最后显示的貌似就是那个bBitmap吧..那只是你提取出来的第一帧的图片..不是视频..然后你每次运行paintview这个类的时候都会把bBitmap重新赋值一次NULL那就是你为什么第二次进去会报空指针的原因了
我去楼主,你怎么那么麻烦你不知道安卓里有这个 BitmapFactory.decodeBitmap(inputstream is);这个东西么