1. 程式人生 > >視訊錄製與播放(豎屏)旋轉90度問題

視訊錄製與播放(豎屏)旋轉90度問題

// 設定橫屏顯示
// setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);


// 選擇支援半透明模式,在有surfaceview的activity中使用。
getWindow().setFormat(PixelFormat.TRANSLUCENT);
setContentView(R.layout.main_video);
init();
// ----------定時器記錄播放進度---------//
mTimer = new Timer();
mTimerTask = new TimerTask() {
@Override
public void run() {

if (m != null) {
if (isPlay) {
skb_video.setProgress(m.getCurrentPosition());
} else {
m.release();
m = null;
}
}
}
};
mTimer.schedule(mTimerTask, 0, 10);
skb_video = (SeekBar) this.findViewById(R.id.SeekBar02);
}


private void init() {
start = (Button) this.findViewById(R.id.start);
stop = (Button) this.findViewById(R.id.stop);

play = (Button) this.findViewById(R.id.play);
start.setOnClickListener(new TestVideoListener());
stop.setOnClickListener(new TestVideoListener());
play.setOnClickListener(new TestVideoListener());
surfaceview = (SurfaceView) this.findViewById(R.id.surfaceview);
SurfaceHolder holder = surfaceview.getHolder();// 取得holder

holder.addCallback(this); // holder加入回撥介面
// setType必須設定,要不出錯.
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}


Camera camera;


class TestVideoListener implements OnClickListener {


public void onClick(View v) {
switch (v.getId()) {
case R.id.start:
mediarecorder = new MediaRecorder();// 建立mediarecorder物件
camera = Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK);
if (camera != null) {
camera.setDisplayOrientation(90);//攝像圖旋轉90度
camera.unlock();
mediarecorder.setCamera(camera);
}
// 設定錄製視訊源為Camera(相機)
mediarecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediarecorder.setOrientationHint(90);//視訊旋轉90度
// 設定錄製完成後視訊的封裝格式THREE_GPP為3gp.MPEG_4為mp4
mediarecorder
.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
// 設定錄製的視訊編碼h263 h264
mediarecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
// 設定視訊錄製的解析度。必須放在設定編碼和格式的後面,否則報錯
mediarecorder.setVideoSize(640, 480);
// 設定錄製的視訊幀率。必須放在設定編碼和格式的後面,否則報錯
mediarecorder.setVideoFrameRate(30);
mediarecorder.setPreviewDisplay(surfaceHolder.getSurface());
// 設定視訊檔案輸出的路徑
mediarecorder.setOutputFile("/sdcard/h264.3gp");
try {
// 準備錄製
mediarecorder.prepare();
// 開始錄製
mediarecorder.start();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
break;
case R.id.stop:
Log.i("", "stop----");
if (!isPlay) {
if (mediarecorder != null) {
// 停止錄製
mediarecorder.stop();
// 釋放資源
mediarecorder.release();
mediarecorder = null;
}
if (camera != null) {
camera.release();
camera = null;
}
} else {
if (m != null) {
isPlay = false;
m.stop();
}
}
break;
case R.id.play:
Log.i("", "play");
isPlay = true;
if (m == null)
m = new MediaPlayer();
m.reset();// 恢復到未初始化的狀態
Uri uri = Uri.parse("/sdcard/h264.3gp");
m = MediaPlayer.create(TestBasicVideo.this, uri);// 讀取視訊
skb_video.setMax(m.getDuration());// 設定SeekBar的長度
m.setAudioStreamType(AudioManager.STREAM_MUSIC);
m.setDisplay(surfaceHolder);// 設定螢幕
// try {
// m.prepare();
// } catch (IOException e) {
// e.printStackTrace();
// }
m.start();
break;
default:
break;
}


}


}


public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// 將holder,這個holder為開始在oncreat裡面取得的holder,將它賦給surfaceHolder
surfaceHolder = holder;
}


public void surfaceCreated(SurfaceHolder holder) {
// 將holder,這個holder為開始在oncreat裡面取得的holder,將它賦給surfaceHolder
surfaceHolder = holder;
}


public void surfaceDestroyed(SurfaceHolder holder) {
// surfaceDestroyed的時候同時物件設定為null
surfaceview = null;
surfaceHolder = null;
mediarecorder = null;
}


}

相關推薦

視訊錄製播放旋轉90問題

// 設定橫屏顯示// setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);// 選擇支援半透明模式,在有surfaceview的activity中使用。getWindow().setForm

android 拍照旋轉90

 第一步: AndroidManifest.xml 在Activity新增以下一個屬性 ? <span>android:configChanges="orientation|keyboardHidden|screenSize" android:sc

利用FFmpeg玩轉Android視訊錄製壓縮

前言 上一回說到啊,這千秋月沒是佳人離別,時逢枯枝落舊城,卻待新蘭滿長街,戰場上還未至瑞雪,各位看官不好意思,今日帝都又霧霾,來聽小老二說書的別忘了加個口罩。在利用FFmpeg玩轉Android視訊錄製與壓縮(二)中我們基本編寫完了所有模組兒程式碼,但是沒有整合在

android進階4step2:Android音視訊處理——音視訊錄製播放

錄音 MediaRecoder Android有一個內建的麥克風,通過它可以捕獲音訊和儲存,或在手機進行播放。 有很多方法可以做到這一點,但最常見的方法是通 過MediaRecorder類。 MediaRecoder常用方法 方法名 描述

Android音視訊-視訊分解合成MP4檔案

上一篇們通過Camera的API結合MediaRecorder實現了視訊的錄製,具體的程式碼也大致的瞭解了。使用起來不是很難,這次得加大對視訊的理解。在視訊的基礎知識裡面我們瞭解了一些視訊的相關的概念和名詞,這篇文章我們搞清楚視訊的組成,視訊分離,視訊的合成等概

關於mstar TV晶片蘋果裝置Airplay投播放畫面窗體旋轉、窗體顯示不正常的解決方案

用下面命令從tv中讀出當前storage的比例設定值 1、cd /Database 2、sqlite3 user_setting.db 3、select enARCType from tbl_VideoSetting where InputSrcType=34; selec

手機影音第十四天,本地音樂列表的展示播放利用視頻播放的布局

獲取本地音樂 共用視頻播放頁面來播放音樂 代碼已經托管到碼雲,有興趣的小夥伴可以下載看看 https://git.oschina.net/joy_yuan/MobilePlayer 效果圖: Android系統提供了MediaScanner,MediaProvider,MediaS

Android音訊實時傳輸播放

服務端共開放兩個埠,一個udp上行埠用來接收amr音訊流,另一個tcp下行埠用來發送amr音訊流。 我這裡寫的服務端實現了組播的功能,即一個人在錄音,可以同時讓很多人同時聽到。 簡而言之,服務端做的唯一一件事情就是轉發音訊流,囧rz。。。 在這裡,我只貼出一部分程式碼,後

AutoCAD2012從入門到精通中文視訊教程 第19課 修剪延伸個人收藏

修剪和延伸的基本技巧首先是選擇,首先要選擇修剪、延伸邊界,或稱為切割物件,也就是選擇作為修剪和延伸的基準的物件,然後就是選擇要被修剪或延伸的物件,掌握了這兩者的選擇技巧就基本掌握了修剪和延伸的操作。 CAD修剪(Trim)和延伸(Extend)的使用技巧 2

windows下使用FFmpeg生成YUV視訊檔案並播放通過命令的方式

一、YUV的定義   YUV是一種顏色編碼方法。它跟我們常見的RGB格式區分開來,常使用在各個視訊處理元件中。其中"Y"代表明亮度,"U"和"V"代表其色度。視訊播放器把市面上流行的MP4等格式的視訊檔案解碼出來,得到的一般會是YUV格式的資料,然後得進行轉碼(比如通過op

2018FFmpeg音視訊核心技術精講實戰已完結

第1章 課程導學與準備工作全民娛樂時代,需要音視訊等多媒體產品層出不窮,但會處理音視訊資料的工程師卻極度匱乏,進入音視訊開發領域正當時,這門課程就是為這樣的你而生。來吧!加入我們,成就更好的自己。1-1 課前必讀(不看會錯過一個億)1-2 課程導學1-3 音視訊的應用範圍與播放器架構講解(選看

FFmpeg音視訊核心技術精講實戰資源最新

第1章 課程導學與準備工作 本章首先介紹音視訊行業的未來前景,然後介紹本課程的具體安排,適合人群以及學習建議,然後會給大家介紹下目前音視訊的應用場景,然後為大家提前講解下播放器架構和音視訊渲染流程,讓大家有個印象,後面在具體章節也會具體的深入的講解。最後會帶大家下載,編譯

FFmpeg音視訊核心技術精講實戰最新完整

第1章 課程導學與準備工作全民娛樂時代,需要音視訊等多媒體產品層出不窮,但會處理音視訊資料的工程師卻極度匱乏,進入音視訊開發領域正當時,這門課程就是為這樣的你而生。來吧!加入我們,成就更好的自己。1-1 課前必讀(不看會錯過一個億)1-2 課程導學1-3 音視訊的應用範圍

Android音訊實時傳輸播放:AMR硬編碼硬解碼

轉載請註明出處! 在Android中我所知道的音訊編解碼有兩種方式: (一)使用AudioRecord採集音訊,用這種方式採集的是未經壓縮的音訊流;用AudioTrack播放實時音訊流。用這兩個類的話,如果需要對音訊進行編解碼,就需要自己移植編解碼庫了,比如可以移植il

2018最全FFmpeg音視訊核心技術精講實戰已完結

變數作用域 變數由作用範圍限制 分類:按照作用域分類 全域性(global): 在函式外部定義 區域性(local):在函式內部定義 變數的作用範圍: 全域性變數:在整個全域性範圍都有效 全域性變數在區域性可以使用(即函式內部可以方位函式外部定義的變數) 區域性變數在區域性範圍可以使用 區域性變數在

2018年最最新FFmpeg音視訊核心技術精講實戰已完結

第1章 課程導學與準備工作全民娛樂時代,需要音視訊等多媒體產品層出不窮,但會處理音視訊資料的工程師卻極度匱乏,進入音視訊開發領域正當時,這門課程就是為這樣的你而生。來吧!加入我們,成就更好的自己。1-1 課前必讀(不看會錯過一個億)1-2 課程導學1-3 音視訊的應用範圍與播放器架構講解(選看

FFmpeg音視訊核心技術精講實戰已完結2018最全

1.背景 匿名內部類有以下問題: 語法過於冗餘 匿名類中的this和變數名容易使人產生誤解 型別載入和例項建立語義不夠靈活 無法捕獲非final的區域性變數 無法對控制流進行抽象 lambda表示式提供了輕量級的語法。 2.語法 lambda表示式的語法由引數列表、箭頭符號->和函式體

2018年最新FFmpeg音視訊核心技術精講實戰已完結

第1章 課程導學與準備工作全民娛樂時代,需要音視訊等多媒體產品層出不窮,但會處理音視訊資料的工程師卻極度匱乏,進入音視訊開發領域正當時,這門課程就是為這樣的你而生。來吧!加入我們,成就更好的自己。1-1 課前必讀(不看會錯過一個億)1-2 課程導學1-3 音視訊的應用範圍與播放器架構講解(選看

2018FFmpeg音視訊核心技術精講實戰已完結最全

第1章 課程導學與準備工作全民娛樂時代,需要音視訊等多媒體產品層出不窮,但會處理音視訊資料的工程師卻極度匱乏,進入音視訊開發領域正當時,這門課程就是為這樣的你而生。來吧!加入我們,成就更好的自己。1-1 課前必讀(不看會錯過一個億)1-2 課程導學1-3 音視訊的應用範圍與播放器架構講解(選看

Android音訊實時傳輸播放:服務端

我偷懶就用java寫了個簡單的伺服器,大家明白原理就好。 服務端共開放兩個埠,一個udp上行埠用來接收amr音訊流,另一個tcp下行埠用來發送amr音訊流。 我這裡寫的服務端實現了組播的功能,即一個人在錄音,可以同時讓很多人同時聽到。 簡而言之,服務端做的唯一一件