Red de conocimientos turísticos - Información de alquiler - Cuando uso la biblioteca FFmpeg para decodificar archivos, cada vez que llamo a la función av_read_frame para obtener un cuadro de datos de video, se devuelven los datos en AVPacket.

Cuando uso la biblioteca FFmpeg para decodificar archivos, cada vez que llamo a la función av_read_frame para obtener un cuadro de datos de video, se devuelven los datos en AVPacket.

Cuando uso la biblioteca FFmpeg para decodificar un archivo, cada vez que llamo a la función av_read_frame para obtener un cuadro de datos de video, el campo de datos en el AVPacket devuelto siempre está vacío. El siguiente es mi código: Código C/C++ AVPacket pktData; av_init_packet( pktData); while (WAIT_TIMEOUT == Wa

Cuando uso la biblioteca FFmpeg para decodificar el archivo, cada vez que llamo a la función av_read_frame obtener un cuadro de datos de video Cuando llamo a la función av_read_frame para obtener un cuadro de datos de video, el campo de datos en el AVPacket devuelto siempre está vacío. ¿Por qué? El siguiente es mi código de procesamiento:

C/C++. código

AVPacket pktData; av_init_packet(&pktData);

Blanco (WAIT_TIMEOUT == WaitForSingleObject(m_hExitEvent,0); av_init_packet(&pktData)); WAIT_TIMEOUT == WaitForSingleObject(m_h hExitEvent,0))

{

if (WAIT_OBJECT_0 == WaitForSingleObject(m_hPauseEvent,INFINITE))

{

//Obtener un cuadro de datos

if (av_ read_frame(&m_stFileEncodeInfo.videoFormatCtx,&pktData)>=0)

{ //determinar si es el cuadro de video deseado datos

if (pktData.stream_index == m_ stFileEncodeInfo.nVideoStreamNum)

{ AVFrame *pFrame; pFrame=avcodec_alloc_frame();

//Decodificar if ( avcodec_decode_video(&m_ stFileEncodeInfo.videoCodecCtx,pFrame,&nGopPicture,pktData.data,pktData.size)> 0)

{ if (nGopPicture > 0)

{ //Procesa el YUV decodificado data...}}}

av_free_packet(&pktData); } }

av_free_packet(&pktData); }}}}

Estoy procesando un formato ts Archivo que contiene un audio y un vídeo. Mientras realizaba las pruebas, descubrí que cada llamada a av_read_frame devuelve 0 y pktData.size es de tamaño normal, pero pktData.data siempre está vacío, excepto la primera vez. Pero pktData.data siempre está vacío excepto la primera vez. Cuando esté vacío, llamar al programa avcodec_decode_video informará un error.

¿Ayúdenme a descubrir qué hay de malo en este método de llamada?

Además, quiero preguntarte, siempre que sigas llamando a la función av_read_frame en un bucle, puedes leer el archivo secuencialmente, ¿verdad? No necesita llamar a fread u otras funciones para leer una determinada parte del archivo, luego asignar los datos leídos a pktData.data y volver a llamar a la función av_read_frame, ¿verdad?

Nota: Antes de esto, se llamaba a av_open_input_file, av_find_stream_info y avcodec_find_decoder. Esto significa que se ha obtenido el formato de codificación de audio y vídeo y la información de decodificación.