Декодировать аппаратное обеспечение декодированного устройства H264 с помощью ffmpeg в режиме реального времени

Я пытаюсь использовать аппаратный H264 кодер на Android для создания видео с камеры и использовать FFmpeg для мультиплексирования в аудио (все на телефоне Android)

То, что я сделал до сих пор, – это пакетирование видео H264 в rtsp пакеты и декодирование его с использованием VLC (через UDP ), поэтому я знаю, что видео, по крайней мере, правильно отформатировано. Тем не менее, у меня возникли проблемы с получением видеоданных в формате ffmpeg в формате, который он может понять.

Я попытался отправить те же rtsp пакеты rtsp на порт 5006 на localhost (через UDP), а затем предоставить ffmpeg с файлом sdp который сообщает ему, какой локальный порт sdp к видеопотоку и как декодировать видео, если я понимаю rtsp корректно работает. Однако это не работает, и мне не удается диагностировать причину, так как ffmpeg просто сидит там, ожидая ввода.

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

Я думаю, что я ищу предложения о том, как это можно сделать. Оптимальное решение будет отправлять пакетированное видео H264 в ffmpeg по sdp , но тогда я не могу отправить ffmpeg параметры файла sdp необходимые для декодирования видео.

Я могу предоставить дополнительную информацию по запросу, например, как ffmpeg скомпилирован для Android, но я сомневаюсь, что это необходимо.

О, и как я начинаю ffmpeg через командную строку, я бы предпочел бы избегать обмана с jni, если это вообще возможно.

И помощь будет очень признательна, спасибо.

Solutions Collecting From Web of "Декодировать аппаратное обеспечение декодированного устройства H264 с помощью ffmpeg в режиме реального времени"

Вы пытались использовать java.lang.Runtime?

 String[] parameters = {"ffmpeg", "other", "args"}; Program program Runtime.getRuntime().exec(parameters); InputStream in = program.getInputStream(); OutputStream out = program.getOutputStream(); InputStream err = program.getErrorStream(); 

Затем вы пишете на stdout и читаете из stdin и stderr. Это не труба, но это должно быть лучше, чем использование сетевого интерфейса.