簡體   English   中英

如何轉換內置Android攝像機錄制的視頻的編解碼器?

[英]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作為“ 主” ,選擇“編碼器level3

  • 在“ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM