Cómo compilar ffmpeg en acciones
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 p>
/* 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 p>
#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