В настоящее время я разрабатываю приложение для Android для записи в замедленном режиме, используя этот проект в качестве примера. Я пробовал это приложение с ZTE BLADE L5 PLUS (Android 5.0), и оно работало просто отлично, но, поскольку мне нужно более 30 [FPS], чтобы получить качественное замедленное видео, я перешел на Sony Xperia XZs (Android 8.0) и попробовал это приложение.
У меня сейчас 2 проблемы:
1. Пропущены кадры:
Когда я записываю от 30 (не пробовал меньше) до 65 кадров в секунду, приложение теряет время от времени больше кадров, чем те, которые я исправил с помощью mMediaRecorder.setVideoFrameRate (int), что фактически заставляет вывод видео «зависать» более чем на 1 секунду. Почему это происходит и как это предотвратить?
2.-Если я установлю значение> = 65 FPS, приложение просто вылетает:
Я на самом деле не знаю, что я делаю здесь не так. Если кто-то увидит в коде что-то, что может привести к сбою, я буду признателен за помощь.
КОД:
private void setupMediaRecorder() throws IOException
{
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mMediaRecorder.setOutputFile(mVideoFileName);
mMediaRecorder.setVideoEncodingBitRate(1000000);
mMediaRecorder.setVideoFrameRate(30);
mMediaRecorder.setVideoSize(mVideoSize.getWidth(), mVideoSize.getHeight());
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mMediaRecorder.setOrientationHint(mTotalRotation);
try
{
mMediaRecorder.prepare();
}
catch (IOException e)
{
e.printStackTrace();
}
}
Журнал с <65FPS: </strong>
11-07 11:33:28.788 9285-9309/com.company.www.project I/vndksupport: sphal namespace is not configured for this process. Loading /vendor/lib64/hw/gralloc.msm8996.so from the current namespace instead.
11-07 11:33:28.793 9285-9309/com.company.www.project I/Adreno: PFP: 0x005ff087, ME: 0x005ff063
11-07 11:33:28.809 9285-9309/com.company.www.project I/OpenGLRenderer: Initialized EGL, version 1.4
11-07 11:33:28.846 9285-9285/com.company.www.project I/CameraManagerGlobal: Connecting to camera service
11-07 11:33:28.874 9285-9285/com.company.www.project E/libc: Access denied finding property "persist.camera.cfa.packagelist"
11-07 11:33:28.862 9285-9285/com.company.www.project W/.project: type=1400 audit(0.0:1356): avc: denied { read } for name="u:object_r:camera_prop:s0" dev="tmpfs" ino=3332 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:camera_prop:s0 tclass=file permissive=0 ppid=1034 pcomm="main" pgid=1034 pgcomm="main"
11-07 11:33:28.874 9285-9285/com.company.www.project E/libc: Access denied finding property "persist.camera.cfa.packagelist"
11-07 11:33:28.879 9285-9290/com.company.www.project I/zygote64: Do partial code cache collection, code=27KB, data=23KB
After code cache collection, code=27KB, data=23KB
Increasing code cache capacity to 128KB
11-07 11:33:28.936 9285-9309/com.company.www.project I/vndksupport: sphal namespace is not configured for this process. Loading /vendor/lib64/hw/gralloc.msm8996.so from the current namespace instead.
11-07 11:33:31.638 9285-9290/com.company.www.project I/zygote64: Do partial code cache collection, code=50KB, data=44KB
After code cache collection, code=50KB, data=44KB
Increasing code cache capacity to 256KB
11-07 11:33:31.639 9285-9290/com.company.www.project I/zygote64: Compiler allocated 6MB to compile void android.view.ViewRootImpl.performTraversals()
11-07 11:33:39.400 9285-9290/com.company.www.project I/zygote64: Do full code cache collection, code=124KB, data=90KB
11-07 11:33:39.401 9285-9290/com.company.www.project I/zygote64: After code cache collection, code=89KB, data=59KB
11-07 11:34:00.273 9285-9285/com.company.www.project I/Choreographer: Skipped 55 frames! The application may be doing too much work on its main thread.
11-07 11:34:00.729 9285-9290/com.company.www.project I/zygote64: Do partial code cache collection, code=124KB, data=82KB
After code cache collection, code=124KB, data=82KB
Increasing code cache capacity to 512KB
11-07 11:34:21.830 9285-9285/com.company.www.project I/Choreographer: Skipped 36 frames! The application may be doing too much work on its main thread.
LOG> = 65FPS:
11-07 12:14:59.806 10366-10366/com.company.www.project E/MediaRecorder: prepare failed: -2147483648
11-07 12:14:59.806 10366-10366/com.company.www.project W/System.err: java.io.IOException: prepare failed.
11-07 12:14:59.807 10366-10366/com.company.www.project W/System.err: at android.media.MediaRecorder._prepare(Native Method)
at android.media.MediaRecorder.prepare(MediaRecorder.java:954)
at com.company.www.project.MainActivity.setupMediaRecorder(MainActivity.java:444)
at com.company.www.project.MainActivity.startRecord(MainActivity.java:456)
at com.company.www.project.MainActivity.checkWriteStoragePermission(MainActivity.java:412)
at com.company.www.project.MainActivity.access$800(MainActivity.java:42)
at com.company.www.project.MainActivity$3.onClick(MainActivity.java:191)
at android.view.View.performClick(View.java:6256)
at android.view.View$PerformClick.run(View.java:24710)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:251)
at android.app.ActivityThread.main(ActivityThread.java:6572)
11-07 12:14:59.808 10366-10366/com.company.www.project W/System.err: at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
11-07 12:14:59.808 10366-10366/com.company.www.project E/MediaRecorder: SurfaceMediaSource could not be initialized!
11-07 12:14:59.810 10366-10366/com.company.www.project E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.company.www.project, PID: 10366
java.lang.IllegalStateException: failed to get surface
at android.media.MediaRecorder.getSurface(Native Method)
at com.company.www.project.MainActivity.startRecord(MainActivity.java:467)
at com.company.www.project.MainActivity.checkWriteStoragePermission(MainActivity.java:412)
at com.company.www.project.MainActivity.access$800(MainActivity.java:42)
at com.company.www.project.MainActivity$3.onClick(MainActivity.java:191)
at android.view.View.performClick(View.java:6256)
at android.view.View$PerformClick.run(View.java:24710)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:251)
at android.app.ActivityThread.main(ActivityThread.java:6572)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Спасибо за ваше время =)