我用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
中获得视频的视频,视频位于MP42
编解码器中,如何将其转换为H.264
?
我尝试使用MediaCodec Documentation,但我不知道在哪里输入我的Uri
(mp42)来获取H.264编解码器视频中的输出(我想在浏览器中播放)。< / p>
有人请给我一些指导......
答案 0 :(得分:2)
(1)修复当前视频文件:
您的视频格式为 H.263 (或Mpeg-2),使用的是Simple
个人资料。正如你所说,这意味着你必须转换。您必须使用一些免费的视频工具重新编码进入H.264任务。
例如:使用Handbrake即可...
选择打开&#34;不播放&#34; 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);
}
}