android wifi 视频,Android开发——通过wifi接收IPCamera视频流
前面,我們已經了解了怎么在android app上打開關閉和掃描,搜索wifi,現在,我來寫一下怎么通過連接wifi來使app獲取到IPCamera攝像頭的視頻。
一、通過URL獲取視頻的地址
二、創建輸入流
三、解析圖片
首先,我是通過抓包軟件來抓取IPCamera攝像頭的視頻流,然后將其分包解析為一張一張的圖片,再將其顯示在界面上。由于我抓到的有GET /videostream.cgi?rate=0 HTTP/1.1 這樣的字眼,所以可以知道,我所使用的是HTTP協議的攝像頭。然后根據Referer: 后面的地址,可以推斷出URL應為http://192.168.10.1/videostream.cgi?user=admin&pwd=&resolution=32&rate=1,主要是注意修改地址后面為/videostream.cgi,user和pwd是這個網頁登入的賬號和密碼,就可以開始創建URL連接了。代碼如下:
URL url;
url = new URL("http://192.168.10.1/videostream.cgi?user=admin&pwd=&resolution=32&rate=1");
URLConnection conn=url.openConnection();
conn.connect();
接下來,開始創建輸入輸出流。
InputStream input =conn.getInputStream();
BufferedInputStream in=newBufferedInputStream(input);
ByteArrayOutputStream outputStream= new ByteArrayOutputStream();
然后就可以開始分包接收到的圖片了。
intreadLength;
String flag= "Content-Length:", flag1 = "\r\n";while (true) {//當輸入流有數據時,則創建byte數組
if (in.available() != -1) {byte buffer[] = new byte[1024];//把讀到的字節數給 readLength
readLength = in.read(buffer, 0, 1024);//讓readLength讀滿
while (readLength < 1024) {
readlength= in.read(buffer, readLength - 1, 1024 -readLength);
readLength= readLength +readlength;
}if (readLength > 0) {
strData= newString(buffer);//標記"Content-Length: "的起始位置
int index =strData.indexOf(flag);//標記"\r\n"的位置,注意是"Content-Length: "之后的第一個位置
int index1 =strData.indexOf(flag1, index);if (index1 != -1 || index1 - (index + flag.length()) > 0 || index != -1) {
String len;
len= strData.substring(index +flag.length(), index1);//計算本次streamLength的長度
streamLength =Integer.parseInt(len.trim());
}if (streamLength > 0) {if ((index1 + 4)
outputStream.write(buffer, index1+ 4, readLength - index1 - 4);
streamLength= streamLength - readLength + index1 + 4;
}//將剩下讀取的視頻流存儲到buffer1
byte[] buffer1 = new byte[streamLength];int length = 0;while (length
length += in.read(buffer1, length, streamLength -length);
}else{
Thread.sleep(150);
}
}
outputStream.write(buffer1,0, streamLength);byte[] data =outputStream.toByteArray();
BitmapFactory.Options op= newBitmapFactory.Options();
op.inSampleSize= 2;
bitmap= BitmapFactory.decodeByteArray(data, 0, data.length, op);if (bitmap != null) {//remoteSurfaceView.setImageBitmap(bitmap);
handler.sendEmptyMessage(MSG_ONE);
}
outputStream.reset();
}
}
}else{
Thread.sleep(300);
}
}
然后,通過handler來更新UI。
private Handler handler = newHandler() {
@Overridepublic voidhandleMessage(Message msg) {super.handleMessage(msg);switch(msg.what) {caseMSG_ONE:
remoteSurfaceView.setImageBitmap(bitmap);break;default:break;
}
}
};
這樣,就可以顯示IPCamera的視屏畫面了,但是,在我的app界面上,視頻始終不能一直播放下去,總是在看到幾分鐘的畫面之后就停下了,具體原因我還沒有搞清楚,也有可能是攝像頭設備的問題,希望知道的高手可以解答一下。
原文:https://www.cnblogs.com/lwkdbk/p/10986960.html
總結
以上是生活随笔為你收集整理的android wifi 视频,Android开发——通过wifi接收IPCamera视频流的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机毕业设计(9)python毕设作品
- 下一篇: 悟透JavaScript--------