2011-07-26 15 views
6

He estado haciendo algunos experimentos con GStreamer usando la utilidad gst-launch. Sin embargo, en última instancia, el objetivo es implementar esta misma funcionalidad en mi propia aplicación utilizando las bibliotecas GStreamer.Gstreamer - Convertir la línea de comando gst-launch en el código C

El problema es que en última instancia es difícil (al menos para alguien que no está acostumbrado a la API GStreamer) "portar" lo que pruebo en la línea de comandos al código C/C++.

Un ejemplo de un comando que puedo necesitar puerto es:

gst-launch filesrc location="CLIP8.mp4" ! decodebin2 ! jpegenc ! multifilesink location="test%d.jpg" 

¿Cuál es la "sencillo" manera/el método más para tomar tales comandos y escribir en C en mi propia aplicación.

Además, como una pregunta complementaria, ¿cómo podría reemplazar el multifilesink con la posibilidad de hacer este trabajo en la memoria (estoy usando OpenCV para realizar algunos cálculos en una imagen determinada que debe extraerse del video). ¿Es posible decodificar directamente en la memoria y usarlo de inmediato sin guardar primero en el sistema de archivos? Podría (y debería) ser secuencial, quiero decir que solo pasaría al siguiente cuadro una vez que haya terminado de procesar el actual, de modo que no tenga que guardar miles de cuadros en la memoria.

¿Qué dice usted?

Respuesta

3

Siempre puede abrir the source of gst-launch y tomar los bits que analizan la línea de comandos y convertirla en una tubería GStreamer.

De esta forma, puede pasar la "línea de comando" como una cadena, y la función le devolverá una línea completa.

+0

Una posibilidad interesante. A pesar de que preferiría seguir unos sencillos pasos para leer una línea de comando para codificar la tubería equivalente en C. , solo pregunto esto porque la documentación de GStreamer no es la más "amigable para el desarrollador";) – petersaints

1

Por cierto, hay un elemento de GStreamer interesante que ofrece una buena manera de integrar una canalización de procesamiento en su (C/C++) aplicación: appsink

http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-appsink.html

Con éste básicamente se puede recuperar los fotogramas de la tubería en una gran matriz C y haz lo que quieras con ellos. Configura una función de devolución de llamada, que se activará cada vez que haya un nuevo cuadro disponible a partir del hilo de la tubería ...

Cuestiones relacionadas