Gambas-it

Programmazione => Progetti degli utenti => Topic aperto da: allegfede - 25 Marzo 2019, 19:53:24

Titolo: player video MINIMALE per schede Black MAgic
Inserito da: allegfede - 25 Marzo 2019, 19:53:24
come da titolo il post potra' essere di qualche interesse solo per chi ha una di queste schede di input/output video.

Ma nel mio caso l'idea e' di avere un flusso video in uscita (video composito, ma si puo' settare anche a SDI puo' hdmi) e relativo audio e contemporaneamente avere un feedback sullo schermo VGA del computer.

Le schede Black MAgic, notoriamente pallose, sono compativili con gstreamer (quasi) ed al momento, con il dirver versione  11.0 sembrerebbe che questo comando GSTREAMER funzioni (ps mode3=pal 50i):

gst-launch-1.0 uridecodebin uri=file:///home/v1p3r/path_del_file_video_funziona_solo_percorso_assoluto.mp4 name=decode decode. ! interlace field-pattern=2:2 ! videoconvert ! video/x-raw,format=UYVY ! videoscale ! video/x-raw,width=720,height=576 ! videorate ! video/x-raw,framerate=25/1 ! decklinkvideosink mode=3 decode. ! audioconvert ! decklinkaudiosink

funzioni.

Quindi da questa base ecco un semplice "sequencer" di comandi shell:
Codice: [Seleziona]
' Gambas class file

Public Processo As Process

Public Sub ColumnView_Files_Drop()

  Dim DatiInArrivo As String
 
  DatiInArrivo = Drag.Data
 
  If (DatiInArrivo Like "file:*") Then
    DatiInArrivo = Mid(DatiInArrivo, 1, (InStr(DatiInArrivo, gb.cr)) - 1)
    ColumnView_Files.Add(ColumnView_Files.Count, DatiInArrivo)
  Endif
 
End

Public Sub Form_Open()
 
  ColumnView_Files.Columns.Count = 1
  ColumnView_Files.Columns[0].Text = "file path"
 
End

Public Sub Button_Play_Click()

  Dim i As Integer
  Dim URI As String
  Dim comandoInizio As String = "gst-launch-1.0 uridecodebin uri="
  Dim comandoFine As String = " name=decode decode. ! interlace field-pattern=2:2 ! videoconvert ! video/x-raw,format=UYVY ! videoscale ! video/x-raw,width=720,height=576 ! videorate ! video/x-raw,framerate=25/1 ! decklinkvideosink mode=3 decode. ! audioconvert ! decklinkaudiosink"
  Dim comando As String
 
  For i = 0 To ColumnView_Files.Count - 1
   
    uri = ColumnView_Files[i].Text
    'gst-launch-1.0 uridecodebin uri=file:///home/v1p3r/Video/tg/farmacie/insegna\ croce\ famacia.mp4 name=decode decode. ! interlace field-pattern=2:2 ! videoconvert ! video/x-raw,format=UYVY ! videoscale ! video/x-raw,width=720,height=576 ! videorate ! video/x-raw,framerate=25/1 ! decklinkvideosink mode=3 decode. ! audioconvert ! decklinkaudiosink
    comando = comandoInizio & uri & comandoFine
    Debug "comando=" & comando
   
    Shell comando Wait For Output
   
  Next
 
End


a seguire, cerchero di implementare un vero e proprio player tramite il componente gb.media di gstreamer.

PS: i file video vanno caricati con drag & drop nella lista a destra.
Titolo: Re:player video MINIMALE per schede Black MAgic
Inserito da: vuott - 25 Marzo 2019, 22:10:13
...ma come ? Proprio tu con il sistema GStreamer.... usi Shell ?!?!?

(https://i.giphy.com/HE193wGJhRXnW.gif)
Titolo: Re:player video MINIMALE per schede Black MAgic
Inserito da: allegfede - 26 Marzo 2019, 19:20:36
c'e' il vecchio problema dell'uso del "linkLater" ... ancora non ho risolto.

vorrei coinvolgere minisini a daer un piccolo template/esempio per l'uso di questo metodo, ma lo vedo preso da altro al momento
Titolo: Re:player video MINIMALE per schede Black MAgic
Inserito da: allegfede - 27 Marzo 2019, 19:32:45
il progetto e' cresciuto un po' ... ma sempre con shell (PURTROPPO).

Il nocciolo del discorso ruota intorno a URIDECODEBIN, perche' non ho voglia di smazzarmi con la gestione di pipeline diverse in base alla sorgente in ingresso.
Quindi tocca usa' "linkLaterTO", che anche dando un'occhiata al sorgente C del componente gb.media, non ci si capisce una mazzaferrata :_(

In questa versione piu' "adulta", la playlist adatta l'ora presunta della messa in onda all'ora ESATTA della trasmissione (ed aggiorna a cascata gli altri orari successivi)
Inoltre prevede anche l'invio di comandi seriali a device esterni che switchano tra' una sorgente all'altra.

Oltre che sorgenti di tipo "file" implementero' a breve anche flussi streaming da sorgenti video esterne.

MA se non riesco ad utilizzare l'oggetto pipeline, ho serie difficolta' a tracciare quel che succede (sono in catena aperta, senza feedback).
Titolo: Re:player video MINIMALE per schede Black MAgic
Inserito da: vuott - 27 Marzo 2019, 20:58:51
I "..decodebin" danno sempre problemi per l'uso della Classe Pipeline
Titolo: Re:player video MINIMALE per schede Black MAgic
Inserito da: allegfede - 01 Aprile 2019, 18:39:58
Sono riuscito "parzialmente" ad aggirare il bisogno di lanciare un processo shell, scopiazzando una wiki di VUOTT.

Ho utilizzato le api di gstreamer e sfruttato gst_parse_lanch.
Ora devo integrare il nuovo "manager" del playback con quello vecchio, ma dovrebbe essere facile.

In allegato il prototipo del manager che (toggle button 2) puo' anche mettere in overlay un testo sul video riprodotto ;-)
Titolo: Re:player video MINIMALE per schede Black MAgic
Inserito da: allegfede - 02 Aprile 2019, 17:19:32
ho integrato il codice dell'esempietto postato precedentemente a quello del player di "playlist".

se volete potete divertirli a modificarlo