Streaming Full HD con OrangePi2 o un RaspberryPi2

Estas de a bajo son las notas que he tomado hace un par de años cuando en internet no encontraba la forma que un pequeño raspberrypi2 o pi3 pudiesen trasmitir en FHD (1080p) a 25fps y una calidad de imágen muy elevada.
Doy por descontado que ya tienes la cámara IP h264/h265 con chip IMX307

…después de mucho penar al final una idea…. La Cámara IP trasmite en formato H264 a 1080p, y yo recorto la pantalla a 720P para dejar fuera las letras de CAM1 y La Fecha (atrasada de años), y vuelvo a re codificar en h264… por lo tanto con muchas limitaciones y baja calidad por la escasa potencia del pequeño OrangePi PC2.

Lo hacía así porqué no había forma de entrar en el panel de configuración de la cámara desde linux y por lo tanto la otra opción era recortar lo que sobraba.

Al final he conseguido entrar en la configuración de la IPCAM usando en una maquina virtual, un viejo Windows7 (sin actualizar), activando ActiveX no firmados y quietando todas las protecciones.

Y por fin (!!) he apagado el reloj y la escrita de CAM1.

El script para lanzar FFMPEG se queda simplificado así:

#!/bin/bash

AUDIOCARD="plughw:CARD=HD3000,DEV=0"
# arecord -L para encontrar la tarjeta de audio usb
#
ABR=128k # Audio Bit Rate
AR=48k # Audio Rate
#
CAM0="rtsp://192.168.0.10:554/user=admin_password=tlJwpbo6_channel=1_stream=0.sdp" # IPCAM
# _stream=0.sdp para full HD
# _stream=1.sdp para 800x448px
#
# la contraseña se puede cambiar, pero es estándar y como que
# la cam está conectada por cable y no hay wifi, es complicado
# que entren
#
OFFSET_AUDIO=1.65 # para sincronizar audio y video
YOUPHPTUBE_URL=rtmp://live.youtube.com # u otro servidor rtmp
KEY=llaves_de_google 
# o de otro servidor rtmp (que veremos mas adelante)


ffmpeg \
-rtsp_transport tcp \
-i "$CAM0" \
-use_wallclock_as_timestamps 1 \
-f alsa -ac 1 \
-itsoffset $OFFSET_AUDIO \
-i $AUDIOCARD \
-c:v copy \
-c:a aac -b:a $ABR -ar $AR \
-f flv "$YOUPHPTUBE_URL/$KEY"

Lanza esto después asegurarte que la cámara esté trasmitiendo a la por ejemplo al 192.168.0.10 y que con VLC puedas ver la imágen pulsando CTRL-N y pegando la url en el campo.

Cambia también la url y la llave del server rtmp.

Para sincroniza audio y video, pon a cero la variable Offset_audio, graba unos 30 segundos, poniéndote delante de la cámara y batiendo las manos.

Luego baja el mp4, ábrelo con vlc, y pulsado las teclas «k» y «l» aumentas y reduces el tiempo, hasta conseguir una buena sincronización. Suponiendo que la diferencia es de 1200 ms, entonce en el script pon «1.2» en la variable Offset_audio. Repite la operación 2 o 3 veces hasta hacer una sincronización perfecta.

Próximamente voy a escribir un breve articulo de como «deployar» un server rtmp en docker.

Comentarios cerrados.