Android實時監(jiān)控項目第四篇:后臺線程發(fā)送預(yù)覽幀視頻數(shù)據(jù)

出處:http://blog.csdn.net/ns_code/article/details/13005125

還記得上篇提到的setPreviewCallback(Camera.PreviewCallback cb)函數(shù)嗎策严?我們在開始預(yù)覽幀視頻之前,調(diào)用的它烦感,這里要注意其內(nèi)部的Camera.PreviewCallback類型的參數(shù)逝变,我們需要寫一個類繼承Camera.PreviewCallback的類基茵,在該類中覆寫public void onPreviewFrame(byte[] data, Camera camera)方法,這里的data參數(shù)保存的即是預(yù)覽幀是視頻數(shù)據(jù)壳影,一旦程序調(diào)用Camera.PreviewCallback接口拱层,便會自動調(diào)用發(fā)方法,因此當(dāng)我們在開始預(yù)覽幀視頻之前調(diào)用setPreviewCallback(Camera.PreviewCallback cb)函數(shù)時态贤,便會回調(diào)該方法舱呻,理論上來說我們在這個方法中寫發(fā)送幀視頻的代碼就行了醋火,但實際上我們并不能這么做悠汽,因為發(fā)送視頻數(shù)據(jù)是一個很耗時的操作箱吕,為了防止UI線程阻塞,我們需要另外開啟一個線程柿冲,在該線程中實現(xiàn)視頻的發(fā)送操作茬高。

這里我們采用AsyncTask<Void, Void, Void>后臺線程,因此我們需要再寫一個類假抄,繼承AsyncTask<Void, Void, Void>抽象類怎栽,并覆寫其中的protected Void doInBackground(Void... params)方法,在該方法中編寫發(fā)送視頻數(shù)據(jù)的程序即可宿饱,這里要注意形參的含義熏瞄,因為的項目中不需要用到這三個參數(shù),因此全部傳入Void.

//該方法運(yùn)行在后臺線程中谬以,主要負(fù)責(zé)執(zhí)行耗時的后臺計算傳輸?shù)裙ぷ鳎?//實際的后臺操作被UI Thread調(diào)用時强饮,該方法被回調(diào)
@Override
protected Void doInBackground(Void... params) {
//cam = (CameraActivity)context;
Size size = cam.getCamera().getParameters().getPreviewSize();
int wide = size.width;
int high = size.height;
YuvImage image = new YuvImage(data, ImageFormat.NV21, wide, high, null);
//因為要實時處理視頻流,因此用內(nèi)存操作流比較合適
ByteArrayOutputStream os = new ByteArrayOutputStream(data.length);
if(!image.compressToJpeg(new Rect(0, 0, wide, high), 100, os)){
    return null;
}
send(os);
return null;
}

這里倒數(shù)第三行的send(os)記為發(fā)送視頻的操作为黎,當(dāng)然邮丰,如果你是做其他的操作,而不是傳輸視頻數(shù)據(jù)铭乾,你也可以將其改為其他的函數(shù)剪廉,比如做街景檢測、人臉車牌識別等炕檩,而其他代碼基本不用修改斗蒋,發(fā)送視頻的send方法基本就是按照TCP協(xié)議編寫,在JAVA中是用Socket類編寫客戶端的代碼:

//發(fā)送視頻流到PC端,這里傳遞過來的參數(shù)os中保存的是視頻輸出流數(shù)據(jù)
private void send(ByteArrayOutputStream os) {
//定義用來保存從輸入流中讀取的視頻流數(shù)據(jù)的byte數(shù)組
byte[] buffer = new byte[1024];
try {
    Socket client = new Socket(ipName,30000);
    OutputStream outSocket = client.getOutputStream();
    //實例化內(nèi)存輸入流笛质,將視頻流數(shù)據(jù)寫入到內(nèi)存中
    ByteArrayInputStream inputFromOs = new ByteArrayInputStream(os.toByteArray());
    //不斷從內(nèi)存中讀取數(shù)據(jù)到buffer中吹泡,不斷再從buffer中將視頻數(shù)據(jù)發(fā)送到outSocket流中
    int amount;
    while((amount =inputFromOs.read(buffer) ) != -1)
        outSocket.write(buffer, 0, amount);
    //這里需要刷新用到緩沖區(qū)的輸出流
    os.flush();
    inputFromOs.close();
    os.close();
    outSocket.close();
} catch (UnknownHostException e) {
    e.printStackTrace();
    System.out.println("無法找到要連接的服務(wù)器");
} catch (IOException e) {
    e.printStackTrace();
    System.out.println("IO錯誤");
}

}

最后,什么時候調(diào)用protected Void doInBackground(Void... params)方法呢经瓷?看了上面那兩篇博客爆哑,應(yīng)該也會明白了,當(dāng)調(diào)用execute(Params... params)方法時舆吮,便會自動回調(diào)該方法揭朝,從而執(zhí)行其內(nèi)部代碼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末色冀,一起剝皮案震驚了整個濱河市潭袱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌锋恬,老刑警劉巖屯换,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡彤悔,警方通過查閱死者的電腦和手機(jī)嘉抓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來晕窑,“玉大人抑片,你說我怎么就攤上這事⊙畛啵” “怎么了敞斋?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長疾牲。 經(jīng)常有香客問我植捎,道長,這世上最難降的妖魔是什么阳柔? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任鸥跟,我火速辦了婚禮,結(jié)果婚禮上盔沫,老公的妹妹穿的比我還像新娘医咨。我一直安慰自己,他們只是感情好架诞,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布拟淮。 她就那樣靜靜地躺著,像睡著了一般谴忧。 火紅的嫁衣襯著肌膚如雪很泊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天沾谓,我揣著相機(jī)與錄音委造,去河邊找鬼。 笑死均驶,一個胖子當(dāng)著我的面吹牛昏兆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播妇穴,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼爬虱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了腾它?” 一聲冷哼從身側(cè)響起跑筝,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瞒滴,沒想到半個月后曲梗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年虏两,在試婚紗的時候發(fā)現(xiàn)自己被綠了愧旦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡碘举,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出搁廓,到底是詐尸還是另有隱情引颈,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布境蜕,位于F島的核電站蝙场,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏粱年。R本人自食惡果不足惜售滤,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望台诗。 院中可真熱鬧完箩,春花似錦、人聲如沸拉队。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽粱快。三九已至秩彤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間事哭,已是汗流浹背漫雷。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留鳍咱,地道東北人降盹。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像谤辜,于是被迫代替她去往敵國和親澎现。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,504評論 25 707
  • public classCamera.Parametersextends Objectjava.lang.Obje...
    冉冉升起的小太陽閱讀 10,864評論 0 7
  • 從三月份找實習(xí)到現(xiàn)在每辟,面了一些公司剑辫,掛了不少,但最終還是拿到小米渠欺、百度妹蔽、阿里、京東、新浪胳岂、CVTE编整、樂視家的研發(fā)崗...
    時芥藍(lán)閱讀 42,184評論 11 349
  • 看到這篇文章,我想起了我小時候發(fā)新書的興奮勁乳丰≌撇猓回到家,父母便拿出早幾天已經(jīng)積攢準(zhǔn)備好的干凈的牛皮紙产园,給我制作書皮了...
    小灰灰蟲蟲閱讀 314評論 0 0
  • 習(xí)慣晚睡的我什燕,睡前習(xí)慣看點劇粘勒。無獨有偶,零點30分屎即,我開始看《轉(zhuǎn)山》庙睡,《轉(zhuǎn)山》這部電影是“暴風(fēng)”推薦的,看了一下...
    織了芽閱讀 292評論 0 0