我正在尝试使用在棒棒糖设备(Android 5及更高版本)上可用的媒体投影API,现在我实现了2种方法在Android上使用这个api:
第一种方式:
使用mediacodec和媒体复用器。
第二种方式
使用媒体录制器类。
我做了什么:
我使用了第一个媒体编解码器,它在不同设备上运行良好,但问题出现在我需要添加音频时(看起来有点复杂)。
然后我尝试使用媒体录制器,因为其他人使用它并且似乎很容易添加音频,所以我做了类似的事情:
//set a media recorder
try{
MediaRecorder mediarecorder = new MediaRecorder();
mediarecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediarecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mediarecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediarecorder.setOutputFile(path_file);
mediarecorder.setVideoSize(480, 270);
mediarecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mediarecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mediarecorder.setVideoEncodingBitRate(70000);
mediarecorder.setVideoFrameRate(30);
mediarecorder.prepare();
}catch(IOException e){
}
//density
Metrics metrics = getReources().getDisplayMetrics();
int density = metrics.densityDpi;
//set virtual display
media_projection.createVirtualDisplay("name",480,270,denisty,DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR, mediarecorder.getSurface(),null,null);
//start
mediarecorder.start();
我很难编码:width
,height
,frame rate
和bitrate
,因为我需要控制输出视频,因为视频的大小往往很大。
我的问题:
使用媒体记录器方法,我在测试api时意识到了一个问题,我使用了2个不同的设备(android 7和android 6),两者都是不同的屏幕密度,但差不多大小相同:
Android 7设备(分辨率:720x1280):
我得到了完美的结果没有问题(这个设备是更高分辨率的设备)。
Android 6设备(分辨率:540x960):
我得到了一个奇怪的损坏输出视频,这样如果我录制一个白色屏幕,我会看到带有紫色模糊内容的损坏视频,如果我录制了蓝屏,我会看到一个带有绿色模糊内容的损坏视频。
问题:
虽然使用媒体编解码器不会出现这些问题,但我的问题是:
为什么使用媒体记录器会发生这种情况?
媒体投影机可以稳定使用媒体记录器吗?
感谢。