Red de conocimiento informático - Material del sitio web - Cómo compilar ffmpeg en acciones

Cómo compilar ffmpeg en acciones

Compile ffmpeg

Primero descomprima ffmpeg-0.5.1.tar.bz2 y luego ejecute el comando de configuración, como se muestra a continuación:

[plain] ver copia simple

./configure --cc=arm-linux-gnueabihf-gcc --host-cc=arm-linux-gnueabihf --prefix=/home/***/iWork/common/gcc-linaro-arm-linux- gnueabihf - 4.8-2013.10_linux --enable-cross-compile --arch=arm --disable-yasm

Compilar:

[plain] ver copia simple

make

Se produjo el siguiente error:

Error:

[plain] ver copia simple

arm-linux-gnueabihf- gcc - DHAVE_AV_CONFIG_H -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -I.

iWork/lamobo/motion-3.2.12-arm-project/ffmpeg-0.5.1"

-D_ISOC99_SOURCE -D_POSIX_C_SOURCE =200112 -std=c99 -fomit-frame-pointer -g - Wdeclaración-después-declaración -Wall -Wno-switch -Wdisabled-optimización

-Wpointer-arith -Wredundant-decls -Wno-pointer- sign - Wcast-qual -Wwrite-strings -Wtype-limits -Wundef -O3 -fno-math-errno -fno-signed-zeros -c -o

libavcodec/dsputil.o libavcodec/dsputil.c

/tmp/ccOmDdh7.s: Información del ensamblador:

/tmp/ccOmDdh7.s:51789: Error: la instrucción condicional del pulgar debe estar en el bloque IT -- `movgt fp,r9'

/tmp/ccOmDdh7.s:51790: Error: la instrucción condicional del pulgar debe estar en el bloque IT -- `movgt r9,r8'

/tmp/ccOmDdh7.s:51792 : Error: Error: la instrucción condicional del pulgar debe estar en el bloque IT - `movgt fp,r9'

/tmp/ccOmDdh7.s:51889: Error: la instrucción condicional del pulgar debe estar en el bloque IT - ` movgt r9,r8'

/tmp/ccOmDdh7.s:51890:

/tmp/ccOmDdh7.s:51892: error: la instrucción condicional del pulgar debe estar en el bloque de código de TI. `movimiento

gt r8,ip'

/tmp/ccOmDdh7.s:51892: Error: la instrucción condicional del pulgar debe estar en el bloque de código de TI - `movle r8,r6'

/tmp/ ccOmDdh7.s:51894: Error: la instrucción condicional del pulgar debe estar en el bloque IT - `movgt r9,r8'

make: *** [libavcodec/dsputil.o] Error 1

Esto requiere modificar ~/ffmpeg-0.5.1/config.mak y agregar lo siguiente a la opción OPTFLAGS (línea 16):

[plain] ver copia simple

- Wa,-mimplicit-it=thumb

Agregar estos significa que las instrucciones "IT" se generarán automáticamente al compilar con las instrucciones Thumb ISA. Al continuar con la compilación, encontramos otro error:

[plain] ver copia simple

strip: no se puede reconocer el formato del archivo de entrada `ffmpeg'

Esto esto se debe a que strip no usa la versión de compilación cruzada, porque las bibliotecas que necesitamos ya han sido compiladas. Los archivos de biblioteca que necesitamos ya están compilados, por lo que este error se puede ignorar. Cambie la tira en config.mak a arm-linux-gnueabihf-strip y luego continúe dejando que se complete la compilación

compilación de movimiento

motion ffmpeg.c es un paquete de ffmpeg api Otros módulos proporcionan funcionalidad. Por ejemplo, el archivo de programa principal motion.c

[cpp] Ver copia normal

//......

#ifdef HAVE_FFMPEG

/* La inicialización de FFMpeg solo se realizará si se encuentra soporte para FFMpeg durante la fase de configuración

* y no está deshabilitado.

*/

ffmpeg_init();

#endif /* HAVE_FFMPEG */

//......

El ffmpeg_init aquí es un método encapsulado en ffmpeg. c:

[cpp] ver copia simple

void ffmpeg_init()

{

motion_log(LOG_INFO, 0, "ffmpeg LIBAVCODEC_BUILD %d LIBAVFORMAT_BUILD %d", LIBAVCODEC_BUILD, LIBAVFORMAT_BUILD);

av_register_all();

#if LIBAVCODEC_BUILD >.4680

av_log_set_callback( (void *)ffmpeg_avcodec_log );

#endif

/* Funciones copiadas para el protocolo de archivo adjunto del protocolo de archivo estándar

*.

*/

mpeg1_file_protocol.url_read = file_protocol.url_read;

mpeg1_file_protocol.url _write = file_protocol.url_write

mpeg1_file_protocol.url_seek; = file_protocol.url_seek;

mpeg1_file_protocol.url_close = file_protocol.url_close

/* Registrar protocolo de archivo adicional. */

#if LIBAVFORMAT_BUILD >= (52<<16 | 31<<8)

av_register_protocol(&mpeg1_file_protocol

#else

);

Register_protocol(&mpeg1_file_protocol);

#endif

}

Necesitamos registrar el protocolo del archivo adjunto.

Necesitamos agregar la compilación del módulo ffmpeg al Makefile de movimiento y activar interruptores como HAVE_FFMPEG. Primero ejecute la configuración de la siguiente manera:

[plain] Ver texto sin formato

. /configure CC=arm-linux-gnueabihf-gcc --host=arm-linux-gnueabihf --prefix=/home/stewart/iWork/common/gcc-linaro-arm-linux-gnueabihf- 4.8-2013.10_linux

Genere Makefile y agregue ffmpeg.o en la opción OBJ:

[plain] ver copia simple

OBJ = ffmpeg.o motion.o conf. jpegutils.o $(VIDEO_OBJ) netcam.o \

netcam_ftp.o netcam_jpeg.o netcam_wget.o track.o \

alg.o event.o imagen. La compilación de la red finalizó.

Dado que el archivo videodev.h está cancelado en el kernel de Linux-2.4 y superior, debe instalar libv4l-dev y luego ver la copia sin formato

[plain]

#include

Cambiar a

[cpp] Ver copia pura

#include

Continuar, el error vuelve a ocurrir:

[plain] Ver copia pura

track.c: En función "uvc_center":

track.c :587:29: error: se desconoce el tamaño de almacenamiento de ' control_s'

track.c:589:24: error: 'V4L2_CID_PRIVATE_BASE' no declarado (primer uso en esta función)

track.c:589:24: Nota: Cada identificador no declarado se informa solo una vez en cada función en la que ocurre

track.c:592:24: error: 'VIDIOC_S_CTRL' no declarado (primer uso en esta función)

track.c:601:31: error: el tamaño de almacenamiento de 'queryctrl' no se conoce

track.c: 605:24: error: 'VIDIOC_QUERYCTRL ' no declarado (primer uso en esta función)

track.c:601:31: advertencia: variable no utilizada 'queryctrl' [-Wunused- variable]

track.c:587: 29: advertencia: variable no utilizada 'control_s' [-Wunused- variable]

track.c:636:25 error: no se conoce el tamaño de almacenamiento de 'control_s'

track. .c:636:25: advertencia: variable no utilizada 'control_s' [-Wunused- variable]

track.c: En función 'uvc_move':

track.c. 29: error: se desconoce el tamaño de almacenamiento de 'control_s'

track.c:726:24: error: 'V4L2_ CID_PRIVATE_BASE' no declarado (primer uso en esta función)

track.c:729:24: error: 'VIDIOC_S_CTRL' no declarado (primer uso en esta función)

track.c:729:24: error: 'VIDIOC_S_CTRL' no declarado (primer uso en esta función)

track.c:724:29: advertencia: variable no utilizada 'control_s' [-Wunused-variabl

e]

track.c:779:25: error: se desconoce el tamaño de almacenamiento de 'control_s'

track.c:779:25 advertencia: variable no utilizada 'control_s. ' [-Wunused- variable]

make: *** [track.o] Error 1

Agregado en track.c:

[plain] Ver copia simple

#include

Continuar con el error (¿por qué hay otro?):

[plain] Ver copia simple

gcc -L/usr/local/lib -o motion.o conf.o draw.o jpegutils.o video.o video2.o video_common.o netcam.o netcam_ftp.o netcam_jpeg.o netcam_wget.o track.o alg.o event.o imagen.o rotar.o webpressInit'

/home/xxx/iWork/Thrid_party/ffmpeg- 0.5.1/libavformat/matroskadec.c:926: referencia no definida a `BZ2_bzDecompress'

/home/xxx/iWork/Thrid_party/ffmpeg-0.5.1/libavformat/matroskadec.c:929: referencia indefinida a `BZ2_bzDecompressEnd'

Esto requiere la biblioteca libbz2, Descargar dirección: http://www.bzip.org/downloads.html

Después de compilar e instalar libbz2, agregue -lbz2 en la opción LIBS del Makefile de movimiento:

[plain] Ver copia simple

LIBS = -lpthread -ljpeg -L/usr/lib -lavformat -lavcodec -lavutil -lm -lz -lbz2