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:

 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?

@ 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) 

?

  • Decodificación de aac-eld en Linux
  • Crear un demultiplexor para MPEG 2 TS en android
  • Hardware acelerado FFmpeg en android?
  • ¿Dónde hay un lugar donde el reproductor ffmpeg se conecta al servidor y empieza a almacenar en búfer?
  • Decodificación de audio a través de Android utilizando FFMpeg
  • Android MediaRecorder setCaptureRate () y velocidad de reproducción de vídeo
  • Recepción de flujo RTP - AudioStream, AudioGroup
  • Error: solo se admiten ejecutables independientes de posición (PIE)
  • FFmpeg en Android
  • Creando video de secuencia de imagenes javacv
  • Arm-linux-androideabi-gcc no puede crear un ejecutable - compilar ffmpeg para dispositivos android armeabi
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.