Страница 1 из 2

Урок 133. Камера. Делаем снимок и пишем видео

Добавлено: 14 окт 2013, 05:26
damager82
В этом уроке:
- делаем снимок
- пишем видео


Click here to read this article!

Re: Урок 133. Камера. Делаем снимок и пишем видео

Добавлено: 14 окт 2013, 17:28
rezak90
добавлю что camera = Camera.open(); будет возвращать null если задняй камеры нету (тестил на 7-м нексусе). Так же и на методе
[syntax=java]mediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));[/syntax]
вообще упадёт, в таких случаях нужно указывать id камеры, а именно 0.

Re: Урок 133. Камера. Делаем снимок и пишем видео

Добавлено: 31 окт 2013, 06:49
Idol
похоже что не со всеми телефонами эта программа работает корректно.
Не разбирался в деталях, но проблема в профилях.

К примеру, программа вылетала при попытке записать видео на телефоне SonyErricson RAY (Андроид 4.0.4) с параметром - CamcorderProfile.QUALITY_HIGH, но работает с CamcorderProfile.QUALITY_LOW.
Прилагаю чуть расширенный лог ошибки, может пригодиться:

Код: Выделить всё

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

Re: Урок 133. Камера. Делаем снимок и пишем видео

Добавлено: 31 окт 2013, 11:41
rezak90
автор просто привёл пример, да нужно расчитывать качество камеры програмно и подставлять

Re: Урок 133. Камера. Делаем снимок и пишем видео

Добавлено: 15 ноя 2013, 16:53
IgNa
НЕ работает :
НА планшете с одной камерой вылетает
НА телефоне с двумя камерами черный экран и звук затвора и всё

Re: Урок 133. Камера. Делаем снимок и пишем видео

Добавлено: 15 ноя 2013, 18:06
rezak90
IgNa писал(а):НЕ работает :
НА планшете с одной камерой вылетает
НА телефоне с двумя камерами черный экран и звук затвора и всё
я выше писал почему не работает

Re: Урок 133. Камера. Делаем снимок и пишем видео

Добавлено: 23 мар 2014, 18:27
Masi4
Доброго дня!

Ориентация активити: портрет (задана в манифесте).
Держу телефон вертикально (портрено).
Делаю снимок и получаю фотографию перевёрнутую на 90 градусов.

Можно ли сообщить камере нужную ориентацию фотографии?
Или после получения массива загнать его в битмап и обработать?

Re: Урок 133. Камера. Делаем снимок и пишем видео

Добавлено: 05 апр 2014, 11:03
Realist
Здравствуйте. А можно сделать снимок без предварительного просмотра? Например Camera.open() и потом сразу camera.takePicture()? Попробовал-не получилось. Выдает NullPointerException.

Re: Урок 133. Камера. Делаем снимок и пишем видео

Добавлено: 06 июн 2014, 12:24
Tabun
Запускал это код на Samsung Galaxy S Plus ( версия 2.3.6) Видео не пишет , выкидывает ошибку и выбрасывает из приложения .После вызова в методе prepareVideoRecorder() camera.stopPreview() перед camera.unlock() все заработала.

Код: Выделить всё

private boolean prepareVideoRecorder(){
		
		camera.stopPreview();   // ДОБАВИТЬ
		camera.unlock();  
		mRecorder = new MediaRecorder();
		
		

Re: Урок 133. Камера. Делаем снимок и пишем видео

Добавлено: 26 июн 2014, 16:48
denis_po3
У меня на HTC Desire S (Android 4.2.2) программа заработала, но не совсем корректно даже для ее базовых функций.
onClickStopRecord – обработчик кнопки Stop. Здесь останавливаем запись видео методом stop и освобождаем ресурсы. Кстати, в хелпе к методу stop написано, что он может выдавать RuntimeException, если что-то не так с аудио/видео, которое дали MediaRecorder-у на вход. Имеет смысл эту ошибку ловить и удалять в таком случае записываемый файл, т.к. там будут некорректные данные.
В документации написано, что RuntimeException вылетает в том случае, если вызвать stop сразу после запуска записи. На моем смартфоне это "сразу" растягивается на несколько секунд. И файл, полученный таким образом, действительно можно сразу удалить, потому что он не успевает до конца создаться. Например, у меня видео занимало на карте 17 Кб и, естественно, не запускалось.

Re: Урок 133. Камера. Делаем снимок и пишем видео

Добавлено: 26 июн 2014, 19:14
denis_po3
А еще после того, как сделан снимок, SurfaceView отображает сделанное фото, а связь с камерой теряется. Вот что нашел в хелпе:
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.
Вроде как надо опять выполнить startPreview() после camera.takePicture, но что-то из этого ничего хорошего не получается: камера в смартфоне вообще становится недоступной и кучей сыпятся ошибки. Приходится перезагружаться. Как правильно реализовать программу, чтобы после сделанного снимка возвращался просмотр?

Re: Урок 133. Камера. Делаем снимок и пишем видео

Добавлено: 06 янв 2015, 06:56
Kseniya
Вы изначально задали имена изображению и видео, тоесть они каждый раз будут пере записывать друг друга? А как сделать чтобы в файл можно было записать не колько изображений? Причем с именами генерирующим имя системой по заданному мной алгоритму?

Re: Урок 133. Камера. Делаем снимок и пишем видео

Добавлено: 18 янв 2015, 10:18
Kotlee
Здравствуйте!Делала запись камеры по указанному уроку, учла моменты, которые были указаны в этой теме в качестве возможных проблем, дописала их, но приложение по-прежнему вылетает при запуске. плохо разбираюсь в записи видео, какие ещё параметры можно учесть, исправить? у меня sumsung c android 4.4.2, камера только одна, задняя. Помогите, пожалуйста!

Re: Урок 133. Камера. Делаем снимок и пишем видео

Добавлено: 19 янв 2015, 06:33
klblk
Kotlee писал(а):Здравствуйте!Делала запись камеры по указанному уроку, учла моменты, которые были указаны в этой теме в качестве возможных проблем, дописала их, но приложение по-прежнему вылетает при запуске. плохо разбираюсь в записи видео, какие ещё параметры можно учесть, исправить? у меня sumsung c android 4.4.2, камера только одна, задняя. Помогите, пожалуйста!
Смотрите логи (ошибки будут выделяться красным, еще есть вебинар на эту тему), т.к. "приложение вылетает" очень абстрактно, и вероятность того что кто-то чем-то сможет помочь очень мала.

Re: Урок 133. Камера. Делаем снимок и пишем видео

Добавлено: 28 фев 2015, 13:48
Lucifer777
А если необходимо, что бы снимок снимался только 640*640 или видео писалось только в таком разрешении (т.е. квадратное) то как поступить?

Re: Урок 133. Камера. Делаем снимок и пишем видео

Добавлено: 11 мар 2015, 21:33
AlexeyS
denis_po3 писал(а):А еще после того, как сделан снимок, SurfaceView отображает сделанное фото, а связь с камерой теряется. ...
Я так добавил метод для восстановления связи с Preview (см. 16 строку):

Код: Выделить всё

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
            }
        });

    }

Re: Урок 133. Камера. Делаем снимок и пишем видео

Добавлено: 20 мар 2015, 20:00
vladsalat93
как мне сохранять файл фото так что бы его было видно в "Галерее" я уже как только не пытался результат нулевой. Помогите пожалуйста :(

Re: Урок 133. Камера. Делаем снимок и пишем видео

Добавлено: 30 мар 2015, 09:52
UTKillr
Вопрос:
Все работает, но при блокировке экрана (нажатие на клавишу выключения) и последующей разблокировке surface view содержит статическое изображение.
Клавиша снятия фото вызывает вылет с ошибкой. Запись видео при этом работает (правда, тоже коряво в плане ориентации)
Что делать, чтобы при блокировке-разблокировке приложение не повисало?

Re: Урок 133. Камера. Делаем снимок и пишем видео

Добавлено: 10 май 2015, 18:56
Эдуард94
Подскажите пожалуйста. Такой вопрос как в этом уроке переделать сохранение фотографии на внутреннюю память. За ранее Благодарю.

Re: Урок 133. Камера. Делаем снимок и пишем видео

Добавлено: 28 мар 2016, 21:46
TKA
Здравствуйте! Если этот форум еще активен, подскажите пожалуйста, при запуске приложения на устройстве не замечали ли вы такое (совместила Ваши 132 и 133 уроки: когда запись видео еще не началась, как телефон не верти, изображение с экрана поступает правильно, не растягивается. Но когда нажимаю запись видео, то изображение искажается. В вертикальной ориентации сжимается по ширине , а в горизонтальной растягивается. С чем это может быть связано? Как можно попробовать это исправить?