我正在尝试从Android的前置摄像头录制视频,同时也在表面视图上显示。
我发现前置摄像头在录制过程中会镜像翻转视频,即使表面视图显示的是正常视图。
我有什么方法可以防止或修复它吗?
我读过像How to keep android from inverting the image from the front facing camera?这样的stackoverflow文章
但它似乎只是在谈论用前置摄像头拍照和反转图像,我已经用矩阵修复了这一点。然而,似乎使用矩阵来表示视频并不起作用。
发布于 2017-07-10 23:59:00
在我的例子中,我只需要在玩它的时候水平翻转。当录制时,它已经翻转为镜像效果,正如我所见,这是不可能修改它。然而,下面的代码解决了我在玩游戏时的问题。
videoPlayer.setScaleX(-1);
发布于 2013-09-16 18:57:48
您必须应用矩阵变换,如下所示:
if(isFrontCamera) {
m.preScale(-ratio, ratio);
} else {
m.preScale(ratio, ratio);
}
假设你不调整任何东西的大小,比例将是1,这将使非前置摄像头preScale过时。
发布于 2021-09-24 17:39:05
如果您需要翻转视频记录并将其保存到内部存储中,那么您可以使用android studio中的Mp4Composer依赖。
首先,您需要添加依赖项,
步骤1.将JitPack存储库添加到构建文件中
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
步骤2.添加依赖项
dependencies {
implementation 'com.github.MasayukiSuda:Mp4Composer-android:v0.4.1'
}
下面是与垂直翻转相同的示例代码。你可以通过生成flipVertical(true)
来翻转它。你也可以通过flipHorizontal(true)
水平翻转它。
private void flipVideo(String path, String destinationPath) {
new Mp4Composer(sourcePath, destinationPath)
.size(1280, 720)
.fillMode(FillMode.PRESERVE_ASPECT_FIT)
//.flipHorizontal(true)
.flipVertical(true)
// .rotation(Rotation.ROTATION_270)
//.filter(glFilter)
//.mute(muteCheckBox.isChecked())
//.timeScale(2f)
//.changePitch(false)
//.trim(2000, 5000)
.listener(new Mp4Composer.Listener() {
@Override
public void onProgress(double progress) {
Log.d("app_log", "onProgress = " + progress);
runOnUiThread(() -> progressBar.setProgress((int) (progress * 100)));
}
@Override
public void onCompleted() {
Log.d("app_log", "onCompleted(): video conversion completed");
runOnUiThread(() -> {
Toast.makeText(CameraActivity.this, "video saved under " + destinationPath, Toast.LENGTH_SHORT).show();
});
}
@Override
public void onCanceled() {
}
@Override
public void onCurrentWrittenVideoTime(long timeUs) {
}
@Override
public void onFailed(Exception exception) {
Log.e("app_log", "onFailed() " + exception.getMessage());
}
})
.start();
}
像这样调用这个方法,
flipVideo(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/video_input.mp4", Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/video_output.mp4");
更多信息:Mp4Composer-android
https://stackoverflow.com/questions/18455666
复制相似问题