Differenze tra le versioni di "Catturare video e audio con una webcam ed un microfono e salvarli in un unico file video mediante le funzioni esterne del API di VLC"

Da Gambas-it.org - Wikipedia.
 
(Una versione intermedia di uno stesso utente non è mostrata)
Riga 1: Riga 1:
 
La risorsa '''VLC''' consente anche di catturare immagini video e contemporaneamente l'audio mediante una webcam ed un microfono e salvarli in un unico file video.
 
La risorsa '''VLC''' consente anche di catturare immagini video e contemporaneamente l'audio mediante una webcam ed un microfono e salvarli in un unico file video.
  
Sarà necessario avere installata nel sistema e richiamare nell'applicazione Gambas la libreria dinamica condivisa: "''libvlc.so.5.6.0''"
+
Sarà necessario avere installata nel sistema e richiamare nell'applicazione Gambas la libreria condivisa: "''libvlc.so.5.6.1'' ".
  
 
Inoltre, bisognerà avere installata nel sistema la libreria ''v4l2'', poiché ''VCL'' fa uso di tale risorsa per la registrazione video.
 
Inoltre, bisognerà avere installata nel sistema la libreria ''v4l2'', poiché ''VCL'' fa uso di tale risorsa per la registrazione video.
 
  
 
Mostriamo di seguito un esempio di cattura di immagini video mediante una webCam con un'applicazione in ambiente grafico, precisando che, se il valore del primo argomento della funzione "''libvlc_new()''" è uguale a zero, allora verrà semplicemente mostrata la ripresa video in tempo reale, ma non verrà effettuata alcuna registrazione; se il valore è uguale a 1, allora verrà effettuata la registrazione su file video, ma non verrà mostrato contemporaneamente la ripresa video.
 
Mostriamo di seguito un esempio di cattura di immagini video mediante una webCam con un'applicazione in ambiente grafico, precisando che, se il valore del primo argomento della funzione "''libvlc_new()''" è uguale a zero, allora verrà semplicemente mostrata la ripresa video in tempo reale, ma non verrà effettuata alcuna registrazione; se il valore è uguale a 1, allora verrà effettuata la registrazione su file video, ma non verrà mostrato contemporaneamente la ripresa video.
Riga 10: Riga 9:
 
   
 
   
 
   
 
   
  Library "libvlc:5.6.0"
+
  Library "libvlc:5.6.1"
 
   
 
   
 
  <FONT Color=gray>' ''libvlc_instance_t * libvlc_new (int argc, const char *const *argv)''
 
  <FONT Color=gray>' ''libvlc_instance_t * libvlc_new (int argc, const char *const *argv)''
Riga 53: Riga 52:
 
   
 
   
 
   
 
   
  '''Public''' Sub Form_Open()
+
  Public Sub Form_Open()
 
    
 
    
  TextBox1.Alignment = Align.Right
+
  TextBox1.Alignment = Align.Right
 
    
 
    
  '''End'''
+
  End
 
   
 
   
 
   
 
   
  '''Public''' Sub Button1_Click()
+
  Public Sub Button1_Click()
 
    
 
    
 
   Dim inst, mp, m As Pointer
 
   Dim inst, mp, m As Pointer
Riga 68: Riga 67:
 
    
 
    
 
  <FONT Color=gray>' ''Individua con precisione il file-device video disponibile:''</font>
 
  <FONT Color=gray>' ''Individua con precisione il file-device video disponibile:''</font>
  video = Dir("/dev", "video*", gb.Device)[0]
+
  video = Dir("/dev", "video*", gb.Device)[0]
 
    
 
    
 
  <FONT Color=gray>' ''Vengono impostate le opzioni ed il percorso ove sarà salvato il file video:''</font>
 
  <FONT Color=gray>' ''Vengono impostate le opzioni ed il percorso ove sarà salvato il file video:''</font>
  ss = ["--sout=#transcode{vcodec=mp2v,fps=60,vb=512,width=640,height=480,acodec=mp3,ab=192,channels=2,samplerate=44100}" &
+
  ss = ["--sout=#transcode{vcodec=mp2v,fps=60,vb=512,width=640,height=480,acodec=mp3,ab=192,channels=2,samplerate=44100}" &
  ":standard{access=file,mux=ts,dst=/tmp/video.mpg}"]
+
      ":standard{access=file,mux=ts,dst=/tmp/video.mpg}"]
 
    
 
    
 
  <FONT Color=gray>' ''Imposta il valore del 1° argomento della funzione "libvlc_new()":''</font>
 
  <FONT Color=gray>' ''Imposta il valore del 1° argomento della funzione "libvlc_new()":''</font>
  argc = 1
+
  argc = 1
 
    
 
    
 
  <FONT Color=gray>' ''Inizializza la libreria VLC:''</font>
 
  <FONT Color=gray>' ''Inizializza la libreria VLC:''</font>
  inst = libvlc_new(argc, ss)
+
  inst = libvlc_new(argc, ss)
  If inst = 0 Then Error.Raise("Impossibile inizializzare la libreria VLC !")
+
  If inst == 0 Then Error.Raise("Impossibile inizializzare la libreria VLC !")
 
    
 
    
 
  <FONT Color=gray>' ''Crea il media player:''</font>
 
  <FONT Color=gray>' ''Crea il media player:''</font>
  mp = libvlc_media_player_new(inst)
+
  mp = libvlc_media_player_new(inst)
  If mp = 0 Then Error.Raise("Impossibile creare il media player !")
+
  If mp == 0 Then Error.Raise("Impossibile creare il media player !")
 
    
 
    
 
  <FONT Color=gray>' ''Crea un nuovo oggetto multimedia.''
 
  <FONT Color=gray>' ''Crea un nuovo oggetto multimedia.''
 
  ' ''Nel secondo argomento della funzione va specificato il percorso del file-device video:''</font>
 
  ' ''Nel secondo argomento della funzione va specificato il percorso del file-device video:''</font>
  m = libvlc_media_new_location(inst, "v4l2:///dev" &/ video)
+
  m = libvlc_media_new_location(inst, "v4l2:///dev" &/ video)
  If m = 0 Then Error.Raise("Impossibile creare un oggetto multimediale !")
+
  If m == 0 Then Error.Raise("Impossibile creare un oggetto multimediale !")
 
    
 
    
 
  <FONT Color=gray>' ''Viene aggiunta l'opzione per la registrazione dell'audio mediante il sistema ALSA:''</font>
 
  <FONT Color=gray>' ''Viene aggiunta l'opzione per la registrazione dell'audio mediante il sistema ALSA:''</font>
  libvlc_media_add_option(m, ":input-slave=alsa://")
+
  libvlc_media_add_option(m, ":input-slave=alsa://")
 
    
 
    
  libvlc_media_player_set_media(mp, m)
+
  libvlc_media_player_set_media(mp, m)
 
    
 
    
 
  <FONT Color=gray>' ''Avvia la cattura del video-audio da parte del media player:''</font>
 
  <FONT Color=gray>' ''Avvia la cattura del video-audio da parte del media player:''</font>
  libvlc_media_player_play(mp)
+
  libvlc_media_player_play(mp)
 
    
 
    
  While bo = False
+
  While bo = False
    TextBox1.Text = Str(Time(0, 0, 0, libvlc_media_player_get_time(mp)))
+
    TextBox1.Text = Str(Time(0, 0, 0, libvlc_media_player_get_time(mp)))
 
  <FONT Color=gray>' ''Il Wait consente di agire su altri oggetti posti sul Form:''</font>
 
  <FONT Color=gray>' ''Il Wait consente di agire su altri oggetti posti sul Form:''</font>
    Wait 0.01
+
    Wait 0.01
  Wend
+
  Wend
 
      
 
      
 
  <FONT Color=gray>' ''Chiude la libreria VLC ed il programma:''</font>
 
  <FONT Color=gray>' ''Chiude la libreria VLC ed il programma:''</font>
  libvlc_media_player_release(mp)
+
  libvlc_media_player_release(mp)
  libvlc_media_release(m)
+
  libvlc_media_release(m)
  libvlc_release(inst)
+
  libvlc_release(inst)
  Me.Close
+
  Me.Close
 
+
 
  '''End'''
+
  End
 +
 
   
 
   
 +
Public Sub Button2_Click()
 
   
 
   
'''Public''' Sub Button2_Click()
 
 
 
 
  <FONT Color=gray>' ''Causa l'arresto della registrazione, la chiusura della libreria VLC e del programma:''</font>
 
  <FONT Color=gray>' ''Causa l'arresto della registrazione, la chiusura della libreria VLC e del programma:''</font>
  bo = True
+
  bo = True
 
+
 
  '''End'''
+
  End
 
La parte della stringa relativa alla cattura audio potrà essere impostata anche utilizzando la codifica ''mp2a'':
 
La parte della stringa relativa alla cattura audio potrà essere impostata anche utilizzando la codifica ''mp2a'':
 
  ....,acodec=mp2a,ab=96,scale=1,channels=2,deinterlace,audio-sync}....
 
  ....,acodec=mp2a,ab=96,scale=1,channels=2,deinterlace,audio-sync}....
 
  
  
 
==Ottenere altri formati di file video==
 
==Ottenere altri formati di file video==
 
Oltre al formato MPG è possibile ottenere qualche altro formato di file video.
 
Oltre al formato MPG è possibile ottenere qualche altro formato di file video.
 
  
 
===Formato video .mp4===
 
===Formato video .mp4===
Riga 132: Riga 129:
 
  ss = ["--sout=#transcode{vcodec=<FONT Color=#B22222>mp4v</font>,fps=60,vb=512,width=640,height=480,acodec=mp3,ab=192,channels=2,samplerate=44100}" &
 
  ss = ["--sout=#transcode{vcodec=<FONT Color=#B22222>mp4v</font>,fps=60,vb=512,width=640,height=480,acodec=mp3,ab=192,channels=2,samplerate=44100}" &
 
       ":standard{access=file,mux=ts,dst=/tmp/video.<FONT Color=#B22222>mp4</font>}"]
 
       ":standard{access=file,mux=ts,dst=/tmp/video.<FONT Color=#B22222>mp4</font>}"]
 
  
 
===Formato video .flv===
 
===Formato video .flv===
Riga 138: Riga 134:
 
  ss = ["--sout=#transcode{vcodec=<FONT Color=#B22222>flv</font>,fps=60,vb=512,width=640,height=480,acodec=mp3,ab=192,channels=2,samplerate=44100}" &
 
  ss = ["--sout=#transcode{vcodec=<FONT Color=#B22222>flv</font>,fps=60,vb=512,width=640,height=480,acodec=mp3,ab=192,channels=2,samplerate=44100}" &
 
       ":standard{access=file,mux=<FONT Color=#B22222>flv</font>,dst=/tmp/video.<FONT Color=#B22222>flv</font>}"]
 
       ":standard{access=file,mux=<FONT Color=#B22222>flv</font>,dst=/tmp/video.<FONT Color=#B22222>flv</font>}"]
 
  
 
===Formato video .avi===
 
===Formato video .avi===
Riga 144: Riga 139:
 
  ss = ["--sout=#transcode{vcodec=<FONT Color=#B22222>h264</font>,fps=60,vb=512,width=640,height=480,acodec=mp3,ab=192,channels=2,samplerate=44100}" &
 
  ss = ["--sout=#transcode{vcodec=<FONT Color=#B22222>h264</font>,fps=60,vb=512,width=640,height=480,acodec=mp3,ab=192,channels=2,samplerate=44100}" &
 
       ":standard{access=file,mux=<FONT Color=#B22222>avi</font>,dst=/tmp/video.<FONT Color=#B22222>avi</font>}"]
 
       ":standard{access=file,mux=<FONT Color=#B22222>avi</font>,dst=/tmp/video.<FONT Color=#B22222>avi</font>}"]
 
  
  

Versione attuale delle 17:28, 12 gen 2024

La risorsa VLC consente anche di catturare immagini video e contemporaneamente l'audio mediante una webcam ed un microfono e salvarli in un unico file video.

Sarà necessario avere installata nel sistema e richiamare nell'applicazione Gambas la libreria condivisa: "libvlc.so.5.6.1 ".

Inoltre, bisognerà avere installata nel sistema la libreria v4l2, poiché VCL fa uso di tale risorsa per la registrazione video.

Mostriamo di seguito un esempio di cattura di immagini video mediante una webCam con un'applicazione in ambiente grafico, precisando che, se il valore del primo argomento della funzione "libvlc_new()" è uguale a zero, allora verrà semplicemente mostrata la ripresa video in tempo reale, ma non verrà effettuata alcuna registrazione; se il valore è uguale a 1, allora verrà effettuata la registrazione su file video, ma non verrà mostrato contemporaneamente la ripresa video.

Private bo As Boolean


Library "libvlc:5.6.1"

' libvlc_instance_t * libvlc_new (int argc, const char *const *argv)
' Create And initialize a libvlc instance.
Private Extern libvlc_new(argc As Integer, argv As String[]) As Pointer

' libvlc_media_t *libvlc_media_new_location (libvlc_instance_t *p_instance, const char * psz_mrl)
' Create a media with a certain given media resource location, for instance a valid URL.
Private Extern libvlc_media_new_location(p_instance As Pointer, path As String) As Pointer

' void libvlc_media_add_option (libvlc_media_t *p_md, const char *psz_options)
' Add an option to the media.
Private Extern libvlc_media_add_option(p_mi As Pointer, psz_options As String)

' libvlc_media_player_t * libvlc_media_player_new (libvlc_instance_t *p_libvlc_instance)
' Create an empty Media Player object.
Private Extern libvlc_media_player_new(p_libvlc_instance As Pointer) As Pointer

' void libvlc_media_player_set_media (libvlc_media_player_t *p_mi, libvlc_media_t *p_md)
' Set the media that will be used by the media_player.
Private Extern libvlc_media_player_set_media(p_md As Pointer, mp As Pointer)

' int libvlc_media_player_play (libvlc_media_player_t * p_mi)
' Play the video file.
Private Extern libvlc_media_player_play(p_mi As Pointer) As Integer

' libvlc_time_t libvlc_media_player_get_time (libvlc_media_player_t * p_mi)
' Get the current movie time (in ms).
Private Extern libvlc_media_player_get_time(p_mi As Pointer) As Integer
 
' void libvlc_media_player_release (libvlc_media_player_t * p_mi)
' Release a media_player after use Decrement the reference count of a media player object.
Private Extern libvlc_media_player_release(p_mi As Pointer)

' void libvlc_media_release (libvlc_media_t *p_md)
' Decrement the reference count of a media descriptor object.
Private Extern libvlc_media_release(p_md As Pointer)

' libvlc_release (libvlc_instance_t * p_instance)
' Decrement the reference count of a libvlc instance, and destroy it if it reaches zero.
Private Extern libvlc_release(p_instance As Pointer)


Public Sub Form_Open()
 
 TextBox1.Alignment = Align.Right
  
End


Public Sub Button1_Click()
 
 Dim inst, mp, m As Pointer
 Dim ss As String[]
 Dim video As String
 Dim argc as Integer
 
' Individua con precisione il file-device video disponibile:
 video = Dir("/dev", "video*", gb.Device)[0]
  
' Vengono impostate le opzioni ed il percorso ove sarà salvato il file video:
 ss = ["--sout=#transcode{vcodec=mp2v,fps=60,vb=512,width=640,height=480,acodec=mp3,ab=192,channels=2,samplerate=44100}" &
      ":standard{access=file,mux=ts,dst=/tmp/video.mpg}"]
  
' Imposta il valore del 1° argomento della funzione "libvlc_new()":
 argc = 1
  
' Inizializza la libreria VLC:
 inst = libvlc_new(argc, ss)
 If inst == 0 Then Error.Raise("Impossibile inizializzare la libreria VLC !")
  
' Crea il media player:
 mp = libvlc_media_player_new(inst)
 If mp == 0 Then Error.Raise("Impossibile creare il media player !")
  
' Crea un nuovo oggetto multimedia.
' Nel secondo argomento della funzione va specificato il percorso del file-device video:
 m = libvlc_media_new_location(inst, "v4l2:///dev" &/ video)
 If m == 0 Then Error.Raise("Impossibile creare un oggetto multimediale !")
  
' Viene aggiunta l'opzione per la registrazione dell'audio mediante il sistema ALSA:
 libvlc_media_add_option(m, ":input-slave=alsa://")
  
 libvlc_media_player_set_media(mp, m)
  
' Avvia la cattura del video-audio da parte del media player:
 libvlc_media_player_play(mp)
  
 While bo = False
   TextBox1.Text = Str(Time(0, 0, 0, libvlc_media_player_get_time(mp)))
' Il Wait consente di agire su altri oggetti posti sul Form:
   Wait 0.01
 Wend
   
' Chiude la libreria VLC ed il programma:
 libvlc_media_player_release(mp)
 libvlc_media_release(m)
 libvlc_release(inst)
 Me.Close
 
End


Public Sub Button2_Click()

' Causa l'arresto della registrazione, la chiusura della libreria VLC e del programma:
 bo = True
 
End

La parte della stringa relativa alla cattura audio potrà essere impostata anche utilizzando la codifica mp2a:

....,acodec=mp2a,ab=96,scale=1,channels=2,deinterlace,audio-sync}....


Ottenere altri formati di file video

Oltre al formato MPG è possibile ottenere qualche altro formato di file video.

Formato video .mp4

Per ottenere un file video di formato MP4, è necessario sostituire la stringa delle opzioni con la seguente:

ss = ["--sout=#transcode{vcodec=mp4v,fps=60,vb=512,width=640,height=480,acodec=mp3,ab=192,channels=2,samplerate=44100}" &
      ":standard{access=file,mux=ts,dst=/tmp/video.mp4}"]

Formato video .flv

Per ottenere un file video di formato FLV, è necessario sostituire la stringa delle opzioni con la seguente:

ss = ["--sout=#transcode{vcodec=flv,fps=60,vb=512,width=640,height=480,acodec=mp3,ab=192,channels=2,samplerate=44100}" &
      ":standard{access=file,mux=flv,dst=/tmp/video.flv}"]

Formato video .avi

Per ottenere un file video di formato AVI, è necessario sostituire la stringa delle opzioni con la seguente:

ss = ["--sout=#transcode{vcodec=h264,fps=60,vb=512,width=640,height=480,acodec=mp3,ab=192,channels=2,samplerate=44100}" &
      ":standard{access=file,mux=avi,dst=/tmp/video.avi}"]


Riferimenti