5

我正在尝试使用在棒棒糖设备(android 5 及更高版本)上可用的媒体投影 api,现在我实现了在 android 中使用此 api 的两种方法:

第一种方式:

使用媒体编解码器和媒体复用器。

第二种方式

使用媒体记录器类。

我做了什么:

我使用了第一个媒体编解码器,它在不同的设备上运行良好,但是当我需要添加音频时问题就来了(看起来有点复杂)。

然后我尝试使用媒体记录器,因为其他一些人使用它并且添加音频似乎很简单,所以我做了这样的事情:

//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):

我得到了一个奇怪的损坏输出视频,如果我录制一个白屏,我会得到一个带有紫色模糊内容的损坏视频,如果我录制一个蓝屏,我会得到一个带有绿色模糊内容的损坏视频。

问题:

虽然这些不会使用媒体编解码器发生,但我的问题是:

为什么使用媒体记录器会发生这种情况?

媒体录像机与媒体投影一起使用是否稳定?

谢谢。

4

0 回答 0