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.
 
(2 versioni intermedie di uno stesso utente non sono mostrate)
Riga 34: Riga 34:
 
  ' ''Play the video file.''</font>
 
  ' ''Play the video file.''</font>
 
  Private Extern libvlc_media_player_play(p_mi As Pointer) As Integer
 
  Private Extern libvlc_media_player_play(p_mi As Pointer) As Integer
 
<FONT Color=gray>' ''libvlc_time_t libvlc_media_player_get_time (libvlc_media_player_t * p_mi)''
 
' ''Get the current movie time (in ms).''</font>
 
Private Extern libvlc_media_player_get_time(p_mi As Pointer) As Integer
 
 
    
 
    
 
  <FONT Color=gray>' ''void libvlc_media_player_release (libvlc_media_player_t * p_mi)''
 
  <FONT Color=gray>' ''void libvlc_media_player_release (libvlc_media_player_t * p_mi)''
Riga 50: Riga 46:
 
  ' ''Decrement the reference count of a libvlc instance, and destroy it if it reaches zero.''</font>
 
  ' ''Decrement the reference count of a libvlc instance, and destroy it if it reaches zero.''</font>
 
  Private Extern libvlc_release(p_instance As Pointer)
 
  Private Extern libvlc_release(p_instance As Pointer)
 +
 
   
 
   
 
  Public Sub ToggleButton1_Click()
 
  Public Sub ToggleButton1_Click()
Riga 68: Riga 65:
 
     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>
 
    mp = libvlc_media_player_new(inst)
 
    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>
Riga 83: Riga 76:
 
  '  '''":sout=#transcode{acodec=mp3,ab=192,channels=2,samplerate=44100,deinterlace,audio-sync} :duplicate{dst=display,dst=std{access=file,mux=mp4,dst=/tmp/video.mp4}}"'''
 
  '  '''":sout=#transcode{acodec=mp3,ab=192,channels=2,samplerate=44100,deinterlace,audio-sync} :duplicate{dst=display,dst=std{access=file,mux=mp4,dst=/tmp/video.mp4}}"'''
 
  ' ''Se si vuole ottenere un file video AVI:''</font>
 
  ' ''Se si vuole ottenere un file video AVI:''</font>
     "sout=#transcode{acodec=mp3,ab=512,channels=2,samplerate=44100,deinterlace,audio-sync}:duplicate{dst=display,dst=std{access=file,mux=avi,dst=/tmp/video.avi}")
+
     libvlc_media_add_option(m, "sout=#transcode{acodec=mp3,ab=512,channels=2,samplerate=44100,deinterlace,audio-sync}:duplicate{dst=display,dst=std{access=file,mux=avi,dst=/tmp/video.avi}")
 +
 +
<FONT Color=gray>' ''Crea il media player:''</font>
 +
    mp = libvlc_media_player_new(inst)
 +
    If mp == 0 Then Error.Raise("Impossibile creare il media player !")
 
   
 
   
 
     libvlc_media_player_set_media(mp, m)
 
     libvlc_media_player_set_media(mp, m)

Versione attuale delle 18:17, 21 ago 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.

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
 
' 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 ToggleButton1_Click()
 
 Dim inst, mp, m As Pointer
 Dim video As String
 Dim tm As Date
 
' Individua con precisione il file-device video disponibile:
 video = Dir("/dev", "video*", gb.Device)[0]
  
 If ToggleButton1.Value Then 
' Inizializza e imposta le opzioni relative al video.
' Se si vuole ottenere un file video MP4: ["vcodec=mp4v,fps=30,vb=512"]
' Se si vuole ottenere un file video AVI: ["vcodec=h264,fps=30,vb=512"]
' oppure per il formato AVI anche: ["vcodec=h265,fps=30,vb=512"]
   inst = libvlc_new(1, ["vcodec=h264,fps=30,vb=512"])  
   If inst == 0 Then Error.Raise("Impossibile inizializzare la libreria VLC !")

' 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 e per la creazione del file video.
   libvlc_media_add_option(m, ":input-slave=alsa://")

' Se si vuole ottenere un file video MP4:
'  ":sout=#transcode{acodec=mp3,ab=192,channels=2,samplerate=44100,deinterlace,audio-sync} :duplicate{dst=display,dst=std{access=file,mux=mp4,dst=/tmp/video.mp4}}"
' Se si vuole ottenere un file video AVI:
   libvlc_media_add_option(m, "sout=#transcode{acodec=mp3,ab=512,channels=2,samplerate=44100,deinterlace,audio-sync}:duplicate{dst=display,dst=std{access=file,mux=avi,dst=/tmp/video.avi}")

' Crea il media player:
   mp = libvlc_media_player_new(inst)
   If mp == 0 Then Error.Raise("Impossibile creare il media player !")

   libvlc_media_player_set_media(mp, m)

' Avvia la cattura del video-audio da parte del media player:
   libvlc_media_player_play(mp)

   tm = Now

   While bo = False
     Me.Title = Str(Time(0, 0, 0, DateDiff(tm, Now, gb.Millisecond)))
' 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
 Else
' Causa l'arresto della registrazione, la chiusura della libreria VLC e del programma:
   bo = True
End


Riferimenti