Урок 133. Камера. Делаем снимок и пишем видео
Добавлено: 14 окт 2013, 05:26
В этом уроке:
- делаем снимок
- пишем видео
Click here to read this article!
- делаем снимок
- пишем видео
Click here to read this article!
Добро пожаловать на форум сайта
http://forum.startandroid.ru/
Код: Выделить всё
10-31 16:05:05.381: W/InputManagerService(285): Got RemoteException sending setActive(false) notification to pid 21115 uid 10024
10-31 16:05:05.571: D/SurfaceFlinger(135): Release buffer at 0xa4878
10-31 16:05:08.211: I/MediaRecorderJNI(21205): prepare: surface=0x1b4ac8 (identity=1249)
10-31 16:05:08.211: D/CameraSource(152): Camera does not support setVideoSize()
10-31 16:05:08.211: D/CameraService(152): getParameter
10-31 16:05:08.211: W/ServiceManager(152): Permission failure: com.sonyericsson.permission.CAMERA_EXTENDED from uid=1013 pid=152
10-31 16:05:08.211: D/CameraService(152): getParameter
10-31 16:05:08.211: W/ServiceManager(152): Permission failure: com.sonyericsson.permission.CAMERA_EXTENDED from uid=1013 pid=152
10-31 16:05:08.221: E/CameraSource(152): Failed to set video frame size to 1280x720. The actual video size is 640x480
10-31 16:05:08.221: E/MediaRecorder(21205): start failed: -19
10-31 16:05:08.221: D/AndroidRuntime(21205): Shutting down VM
10-31 16:05:08.221: W/dalvikvm(21205): threadid=1: thread exiting with uncaught exception (group=0x2b542210)
10-31 16:05:08.221: E/AndroidRuntime(21205): FATAL EXCEPTION: main
10-31 16:05:08.221: E/AndroidRuntime(21205): java.lang.IllegalStateException: Could not execute method of the activity
10-31 16:05:08.221: E/AndroidRuntime(21205): at android.view.View$1.onClick(View.java:3063)
10-31 16:05:08.221: E/AndroidRuntime(21205): at android.view.View.performClick(View.java:3534)
10-31 16:05:08.221: E/AndroidRuntime(21205): at android.view.View$PerformClick.run(View.java:14263)
10-31 16:05:08.221: E/AndroidRuntime(21205): at android.os.Handler.handleCallback(Handler.java:605)
10-31 16:05:08.221: E/AndroidRuntime(21205): at android.os.Handler.dispatchMessage(Handler.java:92)
10-31 16:05:08.221: E/AndroidRuntime(21205): at android.os.Looper.loop(Looper.java:137)
10-31 16:05:08.221: E/AndroidRuntime(21205): at android.app.ActivityThread.main(ActivityThread.java:4441)
10-31 16:05:08.221: E/AndroidRuntime(21205): at java.lang.reflect.Method.invokeNative(Native Method)
10-31 16:05:08.221: E/AndroidRuntime(21205): at java.lang.reflect.Method.invoke(Method.java:511)
10-31 16:05:08.221: E/AndroidRuntime(21205): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
10-31 16:05:08.221: E/AndroidRuntime(21205): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
10-31 16:05:08.221: E/AndroidRuntime(21205): at dalvik.system.NativeStart.main(Native Method)
10-31 16:05:08.221: E/AndroidRuntime(21205): Caused by: java.lang.reflect.InvocationTargetException
10-31 16:05:08.221: E/AndroidRuntime(21205): at java.lang.reflect.Method.invokeNative(Native Method)
10-31 16:05:08.221: E/AndroidRuntime(21205): at java.lang.reflect.Method.invoke(Method.java:511)
10-31 16:05:08.221: E/AndroidRuntime(21205): at android.view.View$1.onClick(View.java:3058)
10-31 16:05:08.221: E/AndroidRuntime(21205): ... 11 more
10-31 16:05:08.221: E/AndroidRuntime(21205): Caused by: java.lang.RuntimeException: start failed.
10-31 16:05:08.221: E/AndroidRuntime(21205): at android.media.MediaRecorder.start(Native Method)
10-31 16:05:08.221: E/AndroidRuntime(21205): at com.example.camerarecord.MainActivity.onClickStartRecord(MainActivity.java:85)
10-31 16:05:08.221: E/AndroidRuntime(21205): ... 14 more
я выше писал почему не работаетIgNa писал(а):НЕ работает :
НА планшете с одной камерой вылетает
НА телефоне с двумя камерами черный экран и звук затвора и всё
Код: Выделить всё
private boolean prepareVideoRecorder(){
camera.stopPreview(); // ДОБАВИТЬ
camera.unlock();
mRecorder = new MediaRecorder();
В документации написано, что RuntimeException вылетает в том случае, если вызвать stop сразу после запуска записи. На моем смартфоне это "сразу" растягивается на несколько секунд. И файл, полученный таким образом, действительно можно сразу удалить, потому что он не успевает до конца создаться. Например, у меня видео занимало на карте 17 Кб и, естественно, не запускалось.onClickStopRecord – обработчик кнопки Stop. Здесь останавливаем запись видео методом stop и освобождаем ресурсы. Кстати, в хелпе к методу stop написано, что он может выдавать RuntimeException, если что-то не так с аудио/видео, которое дали MediaRecorder-у на вход. Имеет смысл эту ошибку ловить и удалять в таком случае записываемый файл, т.к. там будут некорректные данные.
Вроде как надо опять выполнить startPreview() после camera.takePicture, но что-то из этого ничего хорошего не получается: камера в смартфоне вообще становится недоступной и кучей сыпятся ошибки. Приходится перезагружаться. Как правильно реализовать программу, чтобы после сделанного снимка возвращался просмотр?This method is only valid when preview is active (after startPreview()). Preview will be stopped after the image is taken; callers must call startPreview() again if they want to re-start preview or take more pictures. This should not be called between start() and stop().
After calling this method, you must not call startPreview() or take another picture until the JPEG callback has returned.
Смотрите логи (ошибки будут выделяться красным, еще есть вебинар на эту тему), т.к. "приложение вылетает" очень абстрактно, и вероятность того что кто-то чем-то сможет помочь очень мала.Kotlee писал(а):Здравствуйте!Делала запись камеры по указанному уроку, учла моменты, которые были указаны в этой теме в качестве возможных проблем, дописала их, но приложение по-прежнему вылетает при запуске. плохо разбираюсь в записи видео, какие ещё параметры можно учесть, исправить? у меня sumsung c android 4.4.2, камера только одна, задняя. Помогите, пожалуйста!
Я так добавил метод для восстановления связи с Preview (см. 16 строку):denis_po3 писал(а):А еще после того, как сделан снимок, SurfaceView отображает сделанное фото, а связь с камерой теряется. ...
Код: Выделить всё
public void onClickPicture(View view)
{
camera.takePicture(null, null, new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
try
{
FileOutputStream fos = new FileOutputStream(photoFile);
fos.write(data);
fos.close();
}
catch (Exception e)
{
e.printStackTrace();
}
camera.startPreview(); // добавленный метод для установления связи с Preview
}
});
}