2017-10-12 59 views
0

我使用android的内置摄像头录制视频,但是当我通过Retrofit2发送到服务器时,视频无法在浏览器中看到。所以经过长时间的搜索后,我知道我用android录制的视频,编解码器是MP42所以我需要将其转换为H.264编解码器才能使其在浏览器中可以播放。如何转换由内置的Android摄像头录制的视频编解码器?

这里是我捕捉视频

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(); 
     } 
    } 

我得到的视频的URI中onActivityResult,视频是在MP42编解码器,我怎样才能将其转换为H.264

我试图使用MediaCodec Documentation,但我不知道在哪里输入我的Uri(mp42)以获得H.264编解码器视频(我想在浏览器中播放)的输出。

有人请给我一些指导..

+0

MP42是一个容器(它也是一个MScodec,但无疑这是这里的情况) - 你可以分享一个链接到例如视频,我们或许能够帮助人们更好地 – Mick

+0

这个视频是MP42我负责上传到服务器..只是看起来像这样 – ken

+2

使用'MediaRecorder' API来捕捉视频。在设置代码期间,您可以选择H.264作为编解码器。 –

回答

2

(1)修复当前的视频文件:

您的视频格式是H.263 (或MPEG-2)使用Simple轮廓。正如你所说的,这意味着你必须转换。你必须这样做重新编码到H.264任务使用一些免费的视频工具。

例如:使用Handbrake你可以做...

  • 选择打开你的“不玩” MP4文件。应该检测为MP4,现在勾选(或启用)选项web optimized

  • Video设置标签,选择编码器Profile和编码器level为。

  • Destination把你的首选输出文件夹和文件名。
    (只需浏览某个文件夹,然后在此处输入您要创建的新文件名)。

  • 点击绿色按钮Start Encode并在浏览器中测试新的MP4输出文件。

(2)固定Android的代码为未来录音:

你必须设置的编解码器H.264在MediaRecorder对象设置,如:

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); 

    } 
} 
相关问题