Pasar un fd int nativo a FFMPEG desde un URI abierto
Estoy tratando de abrir un descriptor de archivo de un CATEGORY_OPENABLE
URI desde el Storage Access Framework. Primero estoy intentando con un archivo en el sdcard, que ya puedo resolver a una ruta de archivo usando la columna _data
y abrir (estoy tratando de conseguir lejos de hacer esto, y utilizar el descriptor de archivo en su lugar).
Tengo el fd como este:
- Construyendo FFmpeg para Android para usar argumentos de línea de comandos
- Android ffmpeg .so descargar
- Android: Reproducción de archivos MP3 con AudioTrack mediante ffmpeg
- ¿Cómo compilar la última FFmpeg Library para Android?
- Reemplazar el codificador de software estándar Android H264 con un basado en ffmpeg
int fd = getContentResolver().openFileDescriptor(data.getData(), "r").detachFd();
Entonces en C ++, estoy tratando de abrirlo así, la idea tomada de cómo pasar correctamente un archivo FileDescriptor a FFmpeg con JNI en Android :
pFormatCtx = avformat_alloc_context(); pFormatCtx->iformat = av_find_input_format("mp3"); char path[50]; sprintf(path, "pipe:%d", fd); int e; if(e=(avformat_open_input(&pFormatCtx,path,NULL,NULL)!=0)){ av_strerror(e, path, 50); return error; }
Esto produce un "Error desconocido" de avformat_open_input
. Lo mismo sucede si uso el método jniGetFDFromFileDescriptor
de lo anterior enlazado en un objeto FileDescriptor
para obtener el int fd en su lugar. ¿Cómo puedo abrir un URI abierto con FFMPEG correctamente sin usar la ruta del archivo?
- Detectar la orientación de un vídeo grabado en android
- Decodificación Raw H264 corriente en android?
- Cómo renderizar vídeo a través de openGLES2 con Android NDK
- Muxing Android MediaCodec codificado H264 paquetes en RTMP
- Buscando FFmpeg Wrappers para Android
- Problema al llamar a ffmpeg.c dos veces que hace que la aplicación se bloquee?
- Android ffmpeg mala salida de video
- Problemas con android-ffmpeg en Android Lollipop
@ Steve M, puede ser que recibió su respuesta de estos puestos: tales como: 1. ffmpeg codificación muestra quería?
Y finalmente explorar este proyecto. https://github.com/illuusio/ffmpeg-example
¡La mejor de las suertes! @Stev M
Mi proyecto ( FFmpegMediaMetadataRetriever ) logra esto. Vea este tema o el archivo completo aquí.
Nota : asegúrese de haber construido FFmpeg con el protocolo de tubería habilitado!
Utilicé avformat_open_input
, dup()
el descriptor de archivo y me aseguré de establecer el offset a través de:
if (state->offset > 0) { state->pFormatCtx = avformat_alloc_context(); state->pFormatCtx->skip_initial_bytes = state->offset; }
Tal vez sea una observación tonta, pero trató de reemplazar:
Avformat_open_input (& avFormatPtr, "dummyFilename", nullptr, nullptr);
(avformat_open_input(&pFormatCtx,path,NULL,NULL)
Reemplazar por:
(avformat_open_input(&pFormatCtx,path,nullptr,nullptr)
?
- Mejor momento / ubicación para configurar un AlarmManager
- No se puede conectar Android a PostgreSQL DB