[英]How to convert codec of video recorded by inbuilt Android camera?
我使用android的內置攝像頭錄制視頻,但是當我通過Retrofit2發送到服務器時,該視頻無法在瀏覽器中看到。因此經過長時間的搜索,我知道我通過android錄制的視頻編解碼器是MP42
所以我需要將其轉換為H.264
編解碼器,以便使其在瀏覽器中可播放。
這是我捕獲視頻的方法
private void recordVideo() {
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
fileUri = getOutputMediaFileUri();
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY,1);
intent.putExtra(MediaStore.EXTRA_OUTPUT,fileUri);
intent.putExtra(MediaStore.EXTRA_DURATION_LIMIT,15);
startActivityForResult(intent, REQUEST_VIDEO_CAPTURE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == RECORD_VIDEO_PERMISSION && resultCode == RESULT_OK){
Uri uri =data.getData(); //so the video file I get it here
Log.d("videoData",data.getData().toString());
videoView.setVideoURI(uri);
videoView.start();
}
}
我在onActivityResult
獲得了視頻的uri,該視頻在MP42
編解碼器中,如何將其轉換為H.264
?
我嘗試使用MediaCodec文檔 ,但我不知道在哪里輸入Uri
(mp42)以獲取H.264編解碼器視頻(我想在瀏覽器中播放)的輸出。
有人請給我一些指導。
(1) 修復當前視頻文件:
您的視頻使用Simple
配置文件的格式為H.263 (或Mpeg-2)。 正確地說,這意味着您必須轉換。 您必須使用一些免費的視頻工具將此代碼重新編碼為H.264任務。
例如:使用手剎,您可以...
選擇打開“不播放” MP4文件。 應該被檢測為MP4,現在勾選(或啟用)“ web optimized
”選項。
在“ Video
設置”選項卡中,選擇“編碼器Profile
作為“ 主” ,選擇“編碼器level
為3 。
在“ Destination
放置您首選的輸出文件夾和文件名。
(只需瀏覽至某個文件夾,然后鍵入新文件名即可在此處創建)。
單擊綠色按鈕Start Encode
然后在瀏覽器中測試新的MP4輸出文件。
(2) 修復Android代碼以備將來錄制:
您必須在MediaRecorder
對象設置中將編解碼器設置為H.264,例如:
myMediaRec = new MediaRecorder(); //create MediaRecorder object
myMediaRec.setVideoEncoder(MediaRecorder.VideoEncoder.H264); //set video codec
因此,基本上您的代碼應如下所示:(未經測試的代碼,僅用於學習或指導)...
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if(requestCode == RECORD_VIDEO_PERMISSION && resultCode == RESULT_OK)
{
//# Create a new instance of MediaRecorder
myMediaRec = new MediaRecorder(); //create MediaRecorder object
mMediaRec.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mMediaRec.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
myMediaRec.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
//# Video settings
myMediaRec.setVideoEncoder(MediaRecorder.VideoEncoder.H264); //contained inside MP4
myMediaRec.setVideoSize(640, 480); //width 640, height 480
myMediaRec.setVideoFrameRate(30); //30 FPS
myMediaRec.setVideoEncodingBitRate(3000000); //adjust this for picture quality
//# Audio settings
myMediaRec.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); //must always be AAC
myMediaRec.setAudioEncoder(MediaRecorder.getAudioSourceMax());
myMediaRec.setAudioEncodingBitRate(16);
myMediaRec.setAudioSamplingRate(44100);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.