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

Обсуждение уроков
Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

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

Сообщение damager82 » 14 окт 2013, 05:26

В этом уроке:
- делаем снимок
- пишем видео


Click here to read this article!
Последний раз редактировалось damager82 28 май 2017, 21:49, всего редактировалось 4 раза.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

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

Сообщение rezak90 » 14 окт 2013, 17:28

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

Idol
Сообщения: 55
Зарегистрирован: 26 июн 2013, 04:33

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

Сообщение Idol » 31 окт 2013, 06:49

похоже что не со всеми телефонами эта программа работает корректно.
Не разбирался в деталях, но проблема в профилях.

К примеру, программа вылетала при попытке записать видео на телефоне 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

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

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

Сообщение rezak90 » 31 окт 2013, 11:41

автор просто привёл пример, да нужно расчитывать качество камеры програмно и подставлять
R.id.team
Политика на форуме запрещена

Аватара пользователя
IgNa
Сообщения: 345
Зарегистрирован: 30 сен 2013, 12:18

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

Сообщение IgNa » 15 ноя 2013, 16:53

НЕ работает :
НА планшете с одной камерой вылетает
НА телефоне с двумя камерами черный экран и звук затвора и всё
Изображение

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

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

Сообщение rezak90 » 15 ноя 2013, 18:06

IgNa писал(а):НЕ работает :
НА планшете с одной камерой вылетает
НА телефоне с двумя камерами черный экран и звук затвора и всё
я выше писал почему не работает
R.id.team
Политика на форуме запрещена

Masi4
Сообщения: 8
Зарегистрирован: 10 окт 2013, 16:54

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

Сообщение Masi4 » 23 мар 2014, 18:27

Доброго дня!

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

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

Realist
Сообщения: 134
Зарегистрирован: 08 фев 2014, 18:15

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

Сообщение Realist » 05 апр 2014, 11:03

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

Tabun
Сообщения: 2
Зарегистрирован: 07 апр 2014, 19:34

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

Сообщение Tabun » 06 июн 2014, 12:24

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

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

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

denis_po3
Сообщения: 14
Зарегистрирован: 01 ноя 2013, 15:45

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

Сообщение denis_po3 » 26 июн 2014, 16:48

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

denis_po3
Сообщения: 14
Зарегистрирован: 01 ноя 2013, 15:45

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

Сообщение denis_po3 » 26 июн 2014, 19:14

А еще после того, как сделан снимок, 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, но что-то из этого ничего хорошего не получается: камера в смартфоне вообще становится недоступной и кучей сыпятся ошибки. Приходится перезагружаться. Как правильно реализовать программу, чтобы после сделанного снимка возвращался просмотр?

Kseniya
Сообщения: 1
Зарегистрирован: 06 янв 2015, 06:54

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

Сообщение Kseniya » 06 янв 2015, 06:56

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

Kotlee
Сообщения: 7
Зарегистрирован: 25 июл 2014, 16:10

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

Сообщение Kotlee » 18 янв 2015, 10:18

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

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

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

Сообщение klblk » 19 янв 2015, 06:33

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

Lucifer777
Сообщения: 122
Зарегистрирован: 18 ноя 2013, 17:53

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

Сообщение Lucifer777 » 28 фев 2015, 13:48

А если необходимо, что бы снимок снимался только 640*640 или видео писалось только в таком разрешении (т.е. квадратное) то как поступить?

AlexeyS
Сообщения: 1
Зарегистрирован: 11 мар 2015, 21:26

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

Сообщение AlexeyS » 11 мар 2015, 21:33

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

    }

vladsalat93
Сообщения: 5
Зарегистрирован: 09 фев 2015, 17:27

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

Сообщение vladsalat93 » 20 мар 2015, 20:00

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

UTKillr
Сообщения: 1
Зарегистрирован: 30 мар 2015, 09:48

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

Сообщение UTKillr » 30 мар 2015, 09:52

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

Эдуард94
Сообщения: 1
Зарегистрирован: 10 май 2015, 18:51

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

Сообщение Эдуард94 » 10 май 2015, 18:56

Подскажите пожалуйста. Такой вопрос как в этом уроке переделать сохранение фотографии на внутреннюю память. За ранее Благодарю.

TKA
Сообщения: 1
Зарегистрирован: 28 мар 2016, 21:40

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

Сообщение TKA » 28 мар 2016, 21:46

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

Ответить