Урок 133. Камера. Делаем снимок и пишем видео
Урок 133. Камера. Делаем снимок и пишем видео
В этом уроке:
- делаем снимок
- пишем видео
Click here to read this article!
- делаем снимок
- пишем видео
Click here to read this article!
Последний раз редактировалось damager82 28 май 2017, 21:49, всего редактировалось 4 раза.
Re: Урок 133. Камера. Делаем снимок и пишем видео
добавлю что camera = Camera.open(); будет возвращать null если задняй камеры нету (тестил на 7-м нексусе). Так же и на методе
[syntax=java]mediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));[/syntax]
вообще упадёт, в таких случаях нужно указывать id камеры, а именно 0.
[syntax=java]mediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));[/syntax]
вообще упадёт, в таких случаях нужно указывать id камеры, а именно 0.
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 133. Камера. Делаем снимок и пишем видео
похоже что не со всеми телефонами эта программа работает корректно.
Не разбирался в деталях, но проблема в профилях.
К примеру, программа вылетала при попытке записать видео на телефоне SonyErricson RAY (Андроид 4.0.4) с параметром - CamcorderProfile.QUALITY_HIGH, но работает с CamcorderProfile.QUALITY_LOW.
Прилагаю чуть расширенный лог ошибки, может пригодиться:
Не разбирался в деталях, но проблема в профилях.
К примеру, программа вылетала при попытке записать видео на телефоне 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. Камера. Делаем снимок и пишем видео
автор просто привёл пример, да нужно расчитывать качество камеры програмно и подставлять
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 133. Камера. Делаем снимок и пишем видео
НЕ работает :
НА планшете с одной камерой вылетает
НА телефоне с двумя камерами черный экран и звук затвора и всё
НА планшете с одной камерой вылетает
НА телефоне с двумя камерами черный экран и звук затвора и всё
Re: Урок 133. Камера. Делаем снимок и пишем видео
я выше писал почему не работаетIgNa писал(а):НЕ работает :
НА планшете с одной камерой вылетает
НА телефоне с двумя камерами черный экран и звук затвора и всё
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 133. Камера. Делаем снимок и пишем видео
Доброго дня!
Ориентация активити: портрет (задана в манифесте).
Держу телефон вертикально (портрено).
Делаю снимок и получаю фотографию перевёрнутую на 90 градусов.
Можно ли сообщить камере нужную ориентацию фотографии?
Или после получения массива загнать его в битмап и обработать?
Ориентация активити: портрет (задана в манифесте).
Держу телефон вертикально (портрено).
Делаю снимок и получаю фотографию перевёрнутую на 90 градусов.
Можно ли сообщить камере нужную ориентацию фотографии?
Или после получения массива загнать его в битмап и обработать?
Re: Урок 133. Камера. Делаем снимок и пишем видео
Здравствуйте. А можно сделать снимок без предварительного просмотра? Например Camera.open() и потом сразу camera.takePicture()? Попробовал-не получилось. Выдает NullPointerException.
Re: Урок 133. Камера. Делаем снимок и пишем видео
Запускал это код на Samsung Galaxy S Plus ( версия 2.3.6) Видео не пишет , выкидывает ошибку и выбрасывает из приложения .После вызова в методе prepareVideoRecorder() camera.stopPreview() перед camera.unlock() все заработала.
Код: Выделить всё
private boolean prepareVideoRecorder(){
camera.stopPreview(); // ДОБАВИТЬ
camera.unlock();
mRecorder = new MediaRecorder();
Re: Урок 133. Камера. Делаем снимок и пишем видео
У меня на HTC Desire S (Android 4.2.2) программа заработала, но не совсем корректно даже для ее базовых функций.
В документации написано, что RuntimeException вылетает в том случае, если вызвать stop сразу после запуска записи. На моем смартфоне это "сразу" растягивается на несколько секунд. И файл, полученный таким образом, действительно можно сразу удалить, потому что он не успевает до конца создаться. Например, у меня видео занимало на карте 17 Кб и, естественно, не запускалось.onClickStopRecord – обработчик кнопки Stop. Здесь останавливаем запись видео методом stop и освобождаем ресурсы. Кстати, в хелпе к методу stop написано, что он может выдавать RuntimeException, если что-то не так с аудио/видео, которое дали MediaRecorder-у на вход. Имеет смысл эту ошибку ловить и удалять в таком случае записываемый файл, т.к. там будут некорректные данные.
Re: Урок 133. Камера. Делаем снимок и пишем видео
А еще после того, как сделан снимок, SurfaceView отображает сделанное фото, а связь с камерой теряется. Вот что нашел в хелпе:
Вроде как надо опять выполнить 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.
Re: Урок 133. Камера. Делаем снимок и пишем видео
Вы изначально задали имена изображению и видео, тоесть они каждый раз будут пере записывать друг друга? А как сделать чтобы в файл можно было записать не колько изображений? Причем с именами генерирующим имя системой по заданному мной алгоритму?
Re: Урок 133. Камера. Делаем снимок и пишем видео
Здравствуйте!Делала запись камеры по указанному уроку, учла моменты, которые были указаны в этой теме в качестве возможных проблем, дописала их, но приложение по-прежнему вылетает при запуске. плохо разбираюсь в записи видео, какие ещё параметры можно учесть, исправить? у меня sumsung c android 4.4.2, камера только одна, задняя. Помогите, пожалуйста!
Re: Урок 133. Камера. Делаем снимок и пишем видео
Смотрите логи (ошибки будут выделяться красным, еще есть вебинар на эту тему), т.к. "приложение вылетает" очень абстрактно, и вероятность того что кто-то чем-то сможет помочь очень мала.Kotlee писал(а):Здравствуйте!Делала запись камеры по указанному уроку, учла моменты, которые были указаны в этой теме в качестве возможных проблем, дописала их, но приложение по-прежнему вылетает при запуске. плохо разбираюсь в записи видео, какие ещё параметры можно учесть, исправить? у меня sumsung c android 4.4.2, камера только одна, задняя. Помогите, пожалуйста!
-
- Сообщения: 122
- Зарегистрирован: 18 ноя 2013, 17:53
Re: Урок 133. Камера. Делаем снимок и пишем видео
А если необходимо, что бы снимок снимался только 640*640 или видео писалось только в таком разрешении (т.е. квадратное) то как поступить?
Re: Урок 133. Камера. Делаем снимок и пишем видео
Я так добавил метод для восстановления связи с 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
}
});
}
-
- Сообщения: 5
- Зарегистрирован: 09 фев 2015, 17:27
Re: Урок 133. Камера. Делаем снимок и пишем видео
как мне сохранять файл фото так что бы его было видно в "Галерее" я уже как только не пытался результат нулевой. Помогите пожалуйста
Re: Урок 133. Камера. Делаем снимок и пишем видео
Вопрос:
Все работает, но при блокировке экрана (нажатие на клавишу выключения) и последующей разблокировке surface view содержит статическое изображение.
Клавиша снятия фото вызывает вылет с ошибкой. Запись видео при этом работает (правда, тоже коряво в плане ориентации)
Что делать, чтобы при блокировке-разблокировке приложение не повисало?
Все работает, но при блокировке экрана (нажатие на клавишу выключения) и последующей разблокировке surface view содержит статическое изображение.
Клавиша снятия фото вызывает вылет с ошибкой. Запись видео при этом работает (правда, тоже коряво в плане ориентации)
Что делать, чтобы при блокировке-разблокировке приложение не повисало?
Re: Урок 133. Камера. Делаем снимок и пишем видео
Подскажите пожалуйста. Такой вопрос как в этом уроке переделать сохранение фотографии на внутреннюю память. За ранее Благодарю.
Re: Урок 133. Камера. Делаем снимок и пишем видео
Здравствуйте! Если этот форум еще активен, подскажите пожалуйста, при запуске приложения на устройстве не замечали ли вы такое (совместила Ваши 132 и 133 уроки: когда запись видео еще не началась, как телефон не верти, изображение с экрана поступает правильно, не растягивается. Но когда нажимаю запись видео, то изображение искажается. В вертикальной ориентации сжимается по ширине , а в горизонтальной растягивается. С чем это может быть связано? Как можно попробовать это исправить?