Differenze tra le versioni di "Salvare in un file video mediante le funzioni esterne del API di GStreamer la ripresa video effettuata con una WebCam"
Da Gambas-it.org - Wikipedia.
Riga 42: | Riga 42: | ||
gst_init(0, 0) | gst_init(0, 0) | ||
− | <FONT Color=gray>' ''Effettua una ripresa per quasi 20 secondi. Per modificare il tempo di ripresa, bisogna cambiare il valore di "num-buffers" | + | <FONT Color=gray>' ''Effettua una ripresa per quasi 20 secondi. Per modificare il tempo di ripresa, bisogna cambiare il valore di "num-buffers"'' |
+ | ' ''Per porre un tempo pressoché infinito, porre il valore a -1 .''</font> | ||
webcam = gst_parse_launch("v4l2src <FONT Color=B22222>num-buffers=400</font> ! queue ! vpuenc codec=0 ! matroskamux ! filesink <FONT Color=B22222>location=/tmp/file_immagine.mkv</font> sync=false", 0) | webcam = gst_parse_launch("v4l2src <FONT Color=B22222>num-buffers=400</font> ! queue ! vpuenc codec=0 ! matroskamux ! filesink <FONT Color=B22222>location=/tmp/file_immagine.mkv</font> sync=false", 0) | ||
Versione delle 16:18, 5 feb 2016
La risorsa GStreamer consente anche di catturare, riprodurre, nonché salvare in un file video la ripresa video effettuata con una WebCam.
La ripresa video potrà essere salvata in file immagine di formato MKV.
Sarà necessario avere installata nel sistema e richiamare nell'applicazione Gambas la libreria dinamica condivisa: "libgstreamer-1.0"
Mostriamo di seguito un esempo pratico in un'applicazione a riga di comando:
Private webcam As Pointer Library "libgstreamer-1.0" Private Enum GST_STATE_VOID_PENDING = 0, GST_STATE_NULL, GST_STATE_READY, GST_STATE_PAUSED, GST_STATE_PLAYING Private Const GST_FORMAT_TIME As Integer = 3 ' gst_init (int *argc, char **argv[]) ' Initializes the GStreamer library, setting up internal path lists, registering built-in elements, and loading standard plugins. Private Extern gst_init(argc As Pointer, argv As Pointer) ' GstElement * gst_parse_launch (const gchar *pipeline_description, GError **error) ' Create a new pipeline based on command line syntax. Private Extern gst_parse_launch(description As String, GError As Pointer) As Pointer ' GstStateChangeReturn gst_element_set_state(GstElement *element, GstState state) ' Sets the state of the element. Private Extern gst_element_set_state(gstelement As Pointer, state As Integer) As Integer ' gboolean gst_element_query_position (GstElement *element, GstFormat format, gint64 *cur) ' Queries an element for the stream position in nanoseconds. Private Extern gst_element_query_position(gstelement As Pointer, gstformat As Pointer, cur As Pointer) As Boolean ' void gst_object_unref(gpointer object) ' Decrements the reference count on object. Private Extern gst_object_unref(gobject As Pointer) Public Sub Main() Dim tempus As Long gst_init(0, 0) ' Effettua una ripresa per quasi 20 secondi. Per modificare il tempo di ripresa, bisogna cambiare il valore di "num-buffers" ' Per porre un tempo pressoché infinito, porre il valore a -1 . webcam = gst_parse_launch("v4l2src num-buffers=400 ! queue ! vpuenc codec=0 ! matroskamux ! filesink location=/tmp/file_immagine.mkv sync=false", 0) ' Avviamo la riproduzione video: gst_element_set_state(webcam, GST_STATE_PLAYING) While True gst_element_query_position(webcam, GST_FORMAT_TIME, VarPtr(tempus)) Write #File.Out, "\rTempo: " & Date(0, 0, 0, 0, 0, 0, tempus / 1000000) Wait 0.01 Wend End Public Sub Application_Read() Dim s As String Input #File.In, s Select Case s Case "p" ' Pone in pausa la riproduzione del file mediale gst_element_set_state(webcam, GST_STATE_PAUSED) Case "r" ' Riprende la riproduzione del file mediale gst_element_set_state(webcam, GST_STATE_PLAYING) Case "s" ' Arresta la riproduzione del file mediale gst_element_set_state(webcam, GST_STATE_NULL) gst_object_unref(webcam) Print "\nEsecuzione terminata." Quit End Select End