Differenze tra le versioni di "Gestione dei file video con le funzioni esterne delle API di GStreamer"

Da Gambas-it.org - Wikipedia.
Riga 1: Riga 1:
==Uso dell'<I>Elemento</i> di ''GStreamer'' per la gestione video==
+
Le funzioni esterne dell'[http://it.wikipedia.org/wiki/Application_programming_interface API] di ''GStreamer'' consentono due modalità per riprodurre un file video:
Per gestire dati video, caricati ad esempio da un file video, mediante le funzioni delle [http://it.wikipedia.org/wiki/Application_programming_interface API] di ''GStreamer'', bisognerà stabilire un concatenamento di almeno due ''Elementi'' di ''GStreamer'': uno per la gestione del sonoro, l'altro per la gestione del video, che andranno appositamente creati.
+
* all'interno di una finestra ''distinta'' dal Form principale;
 +
* all'interno di un oggetto capace di supportare il video e in generale le immagini, posto sul Form principale.
  
Facciamo dunque riferimento alle pagine della WIKI, nelle quali è stata descritta [http://www.gambas-it.org/wiki/index.php?title=La_gestione_mediante_le_funzioni_esterne_delle_API_di_GStreamer la gestione del sonoro in ''GStreamer''].
+
Facciamo riferimento, per i casi e gli esempi di codice che seguono, alla pagina della WIKI, nelle quali è stata descritta [http://www.gambas-it.org/wiki/index.php?title=La_gestione_mediante_le_funzioni_esterne_delle_API_di_GStreamer la gestione del sonoro in ''GStreamer'']. Lì si potrà avere contezza anche delle funzioni estrene di ''GStreamer'' dichiarate ed utilizzate.
  
  
==Creazione dell'<I>Elemento</i> video mediante apposita funzione esterna==
+
==Riproduzione del video all'interno di una finestra distinta da ''Form'' principale==
In particolare, dopo la funzione esterna gst_element_factory_make("playbin", "elem") per la creazione dell'<I>Elemento</i> per la gestgione del sonoro, utilizzeremo ancora quella funzione:
+
Per ottenere la riproduzione di un file video all'interno di una finestra distinta da ''Form'' principale, e generata automaticamente da ''GStreamer'', sarà sufficiente utilizzare la funzione esterna:
 
  ''GstElement * gst_element_factory_make(const gchar *factoryname, const gchar *name)''
 
  ''GstElement * gst_element_factory_make(const gchar *factoryname, const gchar *name)''
alla quale si passerà il nome di un ''Elemento'' fra quelli predisposti da ''GStreamer'' ed una denominazione per l'<I>Elemento</i> appena creato. È possibile passare ''NULL'' come argomento ''name'' per ottenere un unico nome predefinito.  
+
alla quale si passerà il nome dell'<I>Elemento</i>, denominato "''playbin''" ed una denominazione per l'<I>Elemento</i> appena creato. È possibile passare ''NULL'' come argomento ''name'' per ottenere un unico nome predefinito.  
 
Pertanto in Gambas questa funzione esterna sarà così dichiarata:
 
Pertanto in Gambas questa funzione esterna sarà così dichiarata:
 
  Private Extern gst_element_factory_make(factoryname As String, name As String) As Pointer
 
  Private Extern gst_element_factory_make(factoryname As String, name As String) As Pointer
 +
 
e la richiameremo in routine ad esempio così:
 
e la richiameremo in routine ad esempio così:
  Private imagesink As Pointer
+
  '''Private''' play As Pointer
 +
 +
 +
'''Public''' Sub Button1_Click()
 
   
 
   
Public Sub .....()
+
  Dim retI As Integer
 
   
 
   
  imagesink = gst_element_factory_make("xvimagesink", "video")
+
  gst_init(0, 0)
In questo modo il video sarà mostrato in un'apposita finestra, generata da ''GStreamer'', distinta dal ''Form'' o da altra finestra adirettamente appartenente al programma Gambas principale.
+
   
 +
  play = gst_element_factory_make("playbin", "play")
 +
 +
  g_object_set(play, "uri", "file:///''percorso/del/file/video''", Null)
 +
 +
<FONT color=gray>' ''Avviamo la riproduzione audio:''</font>
 +
  retI = gst_element_set_state(play, GST_STATE_PLAYING)
 +
  Print "Stato di cambiamento = "; retI
 +
 
 +
'''End'''
  
  
===Mostrare il video sul Form===
+
==Mostrare il video sul Form==
 
Per mostrare il video sul ''Form'' dell'applicazione Gambas principale (e dunque non, come nel caso precedente, in una finestra distinta) si dovrà porre sul ''Form'' un oggetto capace di supportare il video (ad esempio in Gambas una ''DrawingArea'') e la seguente funzione esterna:
 
Per mostrare il video sul ''Form'' dell'applicazione Gambas principale (e dunque non, come nel caso precedente, in una finestra distinta) si dovrà porre sul ''Form'' un oggetto capace di supportare il video (ad esempio in Gambas una ''DrawingArea'') e la seguente funzione esterna:
 
  ''void gst_video_overlay_set_window_handle(GstVideoOverlay *overlay, guintptr handle)''
 
  ''void gst_video_overlay_set_window_handle(GstVideoOverlay *overlay, guintptr handle)''
Riga 29: Riga 43:
 
e sarà richiamata in routine ad esempio così:
 
e sarà richiamata in routine ad esempio così:
 
  gst_video_overlay_set_window_handle(elemSonoro, DrawingArea1.Handle)
 
  gst_video_overlay_set_window_handle(elemSonoro, DrawingArea1.Handle)
 +
Detta funzione andrà posta immediatamente dopo la funzione ''g_object_set()''. Facendo riferimento all'esempio precedente:
 +
'''Private''' play As Pointer
 +
 +
 +
'''Public''' Sub Button1_Click()
 +
 +
  Dim retI As Integer
 +
 +
  gst_init(0, 0)
 +
 +
  play = gst_element_factory_make("playbin", "play")
 +
 +
  g_object_set(play, "uri", "file:///''percorso/del/file/video''", Null)
 +
 +
  <FONT color=#B22222>gst_video_overlay_set_window_handle(play, DrawingArea1.Handle)</font>
 +
 +
<FONT color=gray>' ''Avviamo la riproduzione audio:''</font>
 +
  retI = gst_element_set_state(play, GST_STATE_PLAYING)
 +
  Print "Stato di cambiamento = "; retI
 +
 
 +
'''End'''

Versione delle 17:47, 28 ott 2013

Le funzioni esterne dell'API di GStreamer consentono due modalità per riprodurre un file video:

  • all'interno di una finestra distinta dal Form principale;
  • all'interno di un oggetto capace di supportare il video e in generale le immagini, posto sul Form principale.

Facciamo riferimento, per i casi e gli esempi di codice che seguono, alla pagina della WIKI, nelle quali è stata descritta la gestione del sonoro in GStreamer. Lì si potrà avere contezza anche delle funzioni estrene di GStreamer dichiarate ed utilizzate.


Riproduzione del video all'interno di una finestra distinta da Form principale

Per ottenere la riproduzione di un file video all'interno di una finestra distinta da Form principale, e generata automaticamente da GStreamer, sarà sufficiente utilizzare la funzione esterna:

GstElement * gst_element_factory_make(const gchar *factoryname, const gchar *name)

alla quale si passerà il nome dell'Elemento, denominato "playbin" ed una denominazione per l'Elemento appena creato. È possibile passare NULL come argomento name per ottenere un unico nome predefinito. Pertanto in Gambas questa funzione esterna sarà così dichiarata:

Private Extern gst_element_factory_make(factoryname As String, name As String) As Pointer

e la richiameremo in routine ad esempio così:

Private play As Pointer


Public Sub Button1_Click()

 Dim retI As Integer

  gst_init(0, 0)

  play = gst_element_factory_make("playbin", "play")

  g_object_set(play, "uri", "file:///percorso/del/file/video", Null)

' Avviamo la riproduzione audio:
  retI = gst_element_set_state(play, GST_STATE_PLAYING)
  Print "Stato di cambiamento = "; retI
 
End


Mostrare il video sul Form

Per mostrare il video sul Form dell'applicazione Gambas principale (e dunque non, come nel caso precedente, in una finestra distinta) si dovrà porre sul Form un oggetto capace di supportare il video (ad esempio in Gambas una DrawingArea) e la seguente funzione esterna:

void gst_video_overlay_set_window_handle(GstVideoOverlay *overlay, guintptr handle)

la quale, però è attualmente contenuta nella libreria libgstvideo-1.0. Il parametro overlay è un pointer che rappresenta l'Elementosonoro, mentre il parametro handle è in intero che rappresenta il numero identificativo (Id) dell'oggetto, posto sul Form, nel quale si intende mostrare il video. In Gambas, come già accennato, l'oggetto sarà una DrawingArea.
Detta funzione sarà in Gambas così dichiarata:

Private Extern gst_video_overlay_set_window_handle(overlay As Pointer, id As Integer) In "libgstvideo-1.0"

e sarà richiamata in routine ad esempio così:

gst_video_overlay_set_window_handle(elemSonoro, DrawingArea1.Handle)

Detta funzione andrà posta immediatamente dopo la funzione g_object_set(). Facendo riferimento all'esempio precedente:

Private play As Pointer


Public Sub Button1_Click()

 Dim retI As Integer

  gst_init(0, 0)

  play = gst_element_factory_make("playbin", "play")

  g_object_set(play, "uri", "file:///percorso/del/file/video", Null)

  gst_video_overlay_set_window_handle(play, DrawingArea1.Handle)

' Avviamo la riproduzione audio:
  retI = gst_element_set_state(play, GST_STATE_PLAYING)
  Print "Stato di cambiamento = "; retI
 
End