Захват видео (Camera API) и простое использование MediaCodec - PullRequest
0 голосов
/ 24 мая 2019

В последнее время я работал с MediaRecorder для захвата видео и обработки их в выводе. Однако, как оказалось, были ограничения безопасности, которые не позволяли мне перехватить выходной поток из MediaRecorder (проблема, представленная в ссылке ниже):

дескриптор файла «Seekable» для использования с MediaRecorder Android 6.0 (API 23)

Поэтому мне пришлось разработать другое решение, и я решил поработать с Camer API и получить там поток. Таким образом, первый способ состоял в том, чтобы работать с onPreviewFrame, перехватывать кадры в файле и конвертировать цвета и форматы (MediaCodec). К счастью, проблему с преобразованием цветов можно обойти, получив видео из, например, SuraceTexture, как описано, например, в проекте Bigflakes:

https://bigflake.com/mediacodec/CameraToMpegTest.java.txt

Я не новичок в Android Java, но это действительно ошеломляет меня. Я не хочу получать готовую квитанцию ​​за это, и я вполне могу сидеть и работать всю следующую неделю и взламывать этот код, но, во-первых, мой вопрос: как вы, ребята, поняли MediaCodec, взяв видео с, например ,. SurfaceTexture, а затем поместил его в MediaMuxer, и, во-вторых, не могли бы вы порекомендовать несколько учебных пособий, где вы начинаете с самого простого проекта по этой теме, а затем постепенно расширяете код?

Я действительно пытаюсь работать над проектом bigflakes, но я беспомощен даже потому, что метод onCreate отсутствует ... и лучшая часть начинается, когда он начинает рендерить видео.

Ответы [ 2 ]

0 голосов
/ 30 мая 2019

Так что прошло почти неделю, и я последовал совету Криса и работал с MediaCodecExample taehwandev , а затем BasicMediaDecode и понял эти коды, хотя последний становится намного сложнее.Однако, по моему мнению, это не очень помогает в понимании Bigflakes CameraToMpegTest.Я должен жаловаться, потому что я брошен в глубокую воду, и кажется, что кроме самоунижения нет особой помощи.Как вы, ребята, узнали о рендеринге в Android, где вы научились использовать медиа-кодек вместе с CamerAPI?Существуют ли учебники, книги, учебные материалы, чтобы решить главный вопрос?Этот комментарий должен принимать форму ответа так: я бы предложил работать с Grafikas show + capture , потому что это по крайней мере реализовано в среде приложения.

0 голосов
/ 25 мая 2019

Bigflakes Страница MediaCodec содержит в основном тесты для MediaCodec, если вы все еще настаиваете на том, чтобы использовать его в качестве ссылки, тогда начните с encodeCameraToMpeg() в CameraToMpegTest , также посмотрите на EncodeAndMux , чтобы получить представление о том, как настроить MediaCodec encoder.

Для рабочего примера захвата видео взгляните на MediaCodecExample taehwandev . Для примера того, как декодировать записанное видео, взгляните на BasicMediaDecode , предоставленный в репозитории Google Samples.

Преимущество использования MediaCodec вместе с Camera1 API состоит в том, что вы сможете поддерживать устройства с API уровня 18 и выше. Если вы ориентируетесь только на уровни API 21 и выше, то Camera2 должен работать, вот вам пример Android Camera2Video , к которому можно обратиться, если необходимо.

Наконец, возможно, стоит взглянуть на новый CameraX API, хотя его еще не следует использовать в производстве, в этом направлении движется API камеры Android. Поэтому, вероятно, стоит взглянуть на официальную документацию и просмотреть руководство или два (например: Exploring CameraX ), чтобы заблаговременно получить основную идею.

ПРИМЕЧАНИЕ. - Пока не используйте API CameraX в рабочем коде , так как библиотека CameraX находится в стадии альфа, и ее поверхности API еще не завершены. Я просто предоставил его в качестве опции, чтобы вы могли следить за ним для дальнейшего использования.

...