MediaRecorder前后攝像頭同時錄像

上一篇camera前后攝像頭同時預(yù)覽的后續(xù),前后攝像頭同時錄像。

直接上重要的代碼就好然想。

/**

*初始化控件以及回調(diào)

*/

private void init() {

surfaceview1 = (SurfaceView) this.findViewById(R.id.surfaceview1);

surfaceview2 = (SurfaceView) this.findViewById(R.id.surfaceview2);

lay = (LinearLayout) this.findViewById(R.id.lay1);

lay = (LinearLayout) this.findViewById(R.id.lay2);

start = (Button) this.findViewById(R.id.start);

stop = (Button) this.findViewById(R.id.stop);

//lay.setVisibility(LinearLayout.INVISIBLE);

surfaceHolder1 = this.surfaceview1.getHolder();// 取得holder

surfaceHolder1.addCallback(new Callback() {

@Override

public void surfaceChanged(SurfaceHolder holder1, int format, int width, int height) {

// TODO Auto-generated method stub

// 將holder,這個holder為開始在oncreat里面取得的holder,將它賦給surfaceHolder

Log.i("SurfaceHolder", "surfaceChanged()");

surfaceHolder1 = holder1;

}

@Override

public void surfaceCreated(SurfaceHolder holder1) {

// TODO Auto-generated method stub

Log.i("SurfaceHolder", Thread.currentThread().getName());

// 將holder通危,這個holder為開始在oncreat里面取得的holder,將它賦給surfaceHolder

surfaceHolder1 = holder1;

// 錄像線程灌曙,當(dāng)然也可以在別的地方啟動,但是一定要在onCreate方法執(zhí)行完成以及surfaceHolder被賦值以后啟動

}

@Override

public void surfaceDestroyed(SurfaceHolder arg0) {

// TODO Auto-generated method stub

Log.i("SurfaceHolder", "surfaceDestroyed()");

// surfaceDestroyed的時候同時對象設(shè)置為null

surfaceview1 = null;

surfaceHolder1 = null;

/*釋放資源 mediarecorder mCamera 否則會后果很嚴(yán)重*/

if (thread1!=null) {

thread1.stopRecord();

thread1=null;

}

}

}); // holder加入回調(diào)接口

// 設(shè)置setType

surfaceHolder1.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

surfaceHolder2 = this.surfaceview2.getHolder();// 取得holder

surfaceHolder2.addCallback(new Callback() {

@Override

public void surfaceChanged(SurfaceHolder holder2, int format, int width, int height) {

// TODO Auto-generated method stub

// 將holder节芥,這個holder為開始在oncreat里面取得的holder在刺,將它賦給surfaceHolder

Log.i("SurfaceHolder", "surfaceChanged()");

surfaceHolder2 = holder2;

}

@Override

public void surfaceCreated(SurfaceHolder holder2) {

// TODO Auto-generated method stub

Log.i("SurfaceHolder", Thread.currentThread().getName());

// 將holder,這個holder為開始在oncreat里面取得的holder头镊,將它賦給surfaceHolder

surfaceHolder2 = holder2;

// 錄像線程蚣驼,當(dāng)然也可以在別的地方啟動,但是一定要在onCreate方法執(zhí)行完成以及surfaceHolder被賦值以后啟動

}

@Override

public void surfaceDestroyed(SurfaceHolder arg0) {

// TODO Auto-generated method stub

Log.i("SurfaceHolder", "surfaceDestroyed()");

// surfaceDestroyed的時候同時對象設(shè)置為null

surfaceview2 = null;

surfaceHolder2 = null;

/*釋放資源 mediarecorder mCamera 否則會后果很嚴(yán)重*/

if (thread2!=null) {

thread2.stopRecord();

thread2=null;

}

}

}); // holder加入回調(diào)接口

// 設(shè)置setType

surfaceHolder2.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

接下來是兩個按鈕的點(diǎn)擊事件:

start.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View arg0) {

// TODO Auto-generated method stub

if (thread1==null) {

thread1 = new RecordThread(10*60*1000, surfaceview1, surfaceHolder1,66);

thread1.start();

thread2 = new RecordThread(10*60*1000, surfaceview2, surfaceHolder2,88);

thread2.start();

}else {

Toast.makeText(MainActivity.this, "正在錄制中……", Toast.LENGTH_SHORT).show();

}

}

});

stop.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View arg0) {

// TODO Auto-generated method stub

if (thread1 != null || thread2 != null) {

thread1.stopRecord();

thread1=null;

thread2.stopRecord();

thread2=null;

}else {

Toast.makeText(MainActivity.this, "視頻錄制還沒開始", Toast.LENGTH_SHORT).show();

}

}

});

錄像的線程RecordThread.java

public RecordThread(long recordTime, SurfaceView surfaceview,

SurfaceHolder surfaceHolder,int camId) {

this.recordTime = recordTime;//定時時間

this.surfaceview = surfaceview;

this.surfaceHolder = surfaceHolder;

this.Mcameraid = camId;

}

public voidrun(){

/**

* 開始錄像

*/

startRecord(Mcameraid);

/**

* 啟動定時器相艇,到規(guī)定時間recordTime后執(zhí)行停止錄像任務(wù)

*/

Timer timer = new Timer();

timer.schedule(new TimerThread(), recordTime);

}

public void startRecord(int McameraId) {

//自己動手豐衣足食

根據(jù)傳入?yún)?shù)McameraId判斷颖杏,用open(cameraid)開啟前后攝像頭,啟動MediaRecorder錄像

MediaRecorder錄像不懂的點(diǎn)這里

}

/**

*停止錄制

*/

public void stopRecord() {

Log.d("lyb","stopRecord()");

surfaceview = null;

surfaceHolder = null;

if (mediarecorder != null) {

// 停止錄制

mediarecorder.stop();

mediarecorder.reset();

// 釋放資源

mediarecorder.release();

mediarecorder = null;

if (mCamera != null) {

mCamera.release();

mCamera = null;

}

}

}

/**

*定時器

*

* @author bcaiw

*

*/

class TimerThread extends TimerTask {

/**

* 停止錄像

*/

@Override

public void run() {

stopRecord();

this.cancel();

}

}


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末坛芽,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌丐膝,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡瘦棋,警方通過查閱死者的電腦和手機(jī)赌朋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門团甲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來产还,“玉大人愈诚,你說我怎么就攤上這事。” “怎么了哩罪?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么虑啤? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮架馋,結(jié)果婚禮上狞山,老公的妹妹穿的比我還像新娘。我一直安慰自己叉寂,他們只是感情好萍启,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著办绝,像睡著了一般伊约。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上孕蝉,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機(jī)與錄音腌逢,去河邊找鬼降淮。 笑死,一個胖子當(dāng)著我的面吹牛搏讶,可吹牛的內(nèi)容都是我干的佳鳖。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼媒惕,長吁一口氣:“原來是場噩夢啊……” “哼系吩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起妒蔚,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤穿挨,失蹤者是張志新(化名)和其女友劉穎月弛,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體科盛,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡帽衙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了贞绵。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片厉萝。...
    茶點(diǎn)故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖榨崩,靈堂內(nèi)的尸體忽然破棺而出谴垫,到底是詐尸還是另有隱情,我是刑警寧澤母蛛,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布翩剪,位于F島的核電站,受9級特大地震影響溯祸,放射性物質(zhì)發(fā)生泄漏肢专。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一焦辅、第九天 我趴在偏房一處隱蔽的房頂上張望博杖。 院中可真熱鬧,春花似錦筷登、人聲如沸剃根。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狈醉。三九已至,卻和暖如春惠险,著一層夾襖步出監(jiān)牢的瞬間苗傅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工班巩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留渣慕,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓抱慌,卻偏偏與公主長得像逊桦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子抑进,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評論 2 345

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

  • 閑來無事寫的强经,簡單的Demo。 PS:有的手機(jī)不支持同時打開前后攝像頭寺渗。 都懂的匿情,首先要添加權(quán)限兰迫。 mainact...
    01b閱讀 3,941評論 3 2
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法码秉,內(nèi)部類的語法逮矛,繼承相關(guān)的語法,異常的語法转砖,線程的語...
    子非魚_t_閱讀 31,581評論 18 399
  • #Android 基礎(chǔ)知識點(diǎn)總結(jié) ---------- ##1.adb - android debug bridg...
    Mythqian閱讀 3,252評論 2 11
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理府蔗,服務(wù)發(fā)現(xiàn)晋控,斷路器,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程姓赤,因...
    小菜c閱讀 6,358評論 0 17