Мне нужно передать данные в MediaExtractor, для этого я использую этот метод SetDataSource https://developer.android.com/ndk/reference/group/media#amediaextractor_setdatasourcefd Вот так: int32_t ...

1
Aleksey Timoshchenko 16 Дек 2020 в 18:02

1 ответ

Лучший ответ

В результате проблема оказалась в том, что метод AMediaExtractor_setDataSourceFd принимает файловый дескриптор в качестве параметра. Чтобы получить дескриптор файла из FILE, вам нужно вызвать метод fileno() для FILE, который был открыт с помощью fopen(), тогда все работает хорошо, но если файл был открыт с fmemopen(), тогда fileno() возвращает -1. Я пытался сделать это через канал https://stackoverflow.com/a/1559018/5709159, но этот подход делает не работает для AMediaExtractor_setDataSourceFd (я думаю, потому что канал не поддерживает seek ()) пытался сделать это через пользовательский MediaExtractor (один из методов setDataSource ()), но он был введен только с api 29 (меня это не очень устраивает) в конце концов я сделал это с обходным путем - я получаю байты, записываю во временный файл и открываю этот файл с помощью fopen() и вызываю fileno(), чтобы получить дескриптор файла и передайте его setDataSouceFd()

0
Aleksey Timoshchenko 19 Дек 2020 в 14:56