Autore Topic: disegnare sopra un video  (Letto 1205 volte)

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
disegnare sopra un video
« il: 03 Dicembre 2018, 17:32:33 »
progetto:
player video che si puo' mettere in pausa (con la barra spaziatrice) e con il mouse, disegnare sopra il frame visualizzato.
poi riprendere il play permettendo al disegno di rimanere visualizzato (o no) ...
il doppio comportamento potrebbe essere "space fa una cosa" mentre "shift e space" ne fa un'altra.

Domanda:
essendo pigro, gb.media.form (player gia' fatto) con sovrapposta una drawing area e' una buona idea?

... lo chiedo perche' anche mettendo .noBackground=true e .background=none (vuoto) .. mi rimane sempre opaco (con sovrapposto il nome del file che apro nel player).

Codice: [Seleziona]
Public Sub DrawingArea_disegno_DblClick()
Dim path As String
 
  Dialog.Title = "Choose a video file"
  Dialog.Filter = ["*.mkv;*.mp4;*.h264", "video files"]
  If Not Dialog.OpenFile() Then
    path = Dialog.Path
    Else
      Return
  Endif

  MediaView_Video.URL = path
End
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:disegnare sopra un video
« Risposta #1 il: 04 Dicembre 2018, 12:26:33 »
.background=none (vuoto)

...semmai:

Codice: [Seleziona]
.background = Color.Transparent
« Ultima modifica: 04 Dicembre 2018, 12:48:47 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:disegnare sopra un video
« Risposta #2 il: 04 Dicembre 2018, 15:23:03 »
Qualunque componente anche se trasparente andrebbe a nascondere MediaView (almeno credo).
Forse potresti usare una textlabel e scrivere nella barra nera o appena sopra (vedi immagini allegate) a seconda di dove posizioni l'altezza:

Codice: [Seleziona]
Public Sub Form_Resize()
 
  MediaView1.W = Me.W - 24
  MediaView1.H = Me.H - 48
  TextLabel1.Text = "Video di Aleg"
  TextLabel1.X = (MediaView1.W - TextLabel1.W) \ 2
  TextLabel1.Y = MediaView1.H - (TextLabel1.H + 20)
  'TextLabel1.Y = MediaView1.H - (TextLabel1.H + 40)
End

P.S. Scusa se ho perso una elle  :-[
« Ultima modifica: 04 Dicembre 2018, 15:24:27 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:disegnare sopra un video
« Risposta #3 il: 04 Dicembre 2018, 15:57:43 »
Il problema sembra essere comunque determinato dall'uso del Componente gb.media.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:disegnare sopra un video
« Risposta #4 il: 04 Dicembre 2018, 15:59:11 »
grazie ad entrambi per i suggeriemnti.

il fatto che visualizzi il nome el file E BASTA, e' un side effect.

sembra che il componente media player riesca a "bucare" la drawing area (nonostante il background color.trasparent) ma non ci riesce con il frame del video in riproduzione.

comunque penso di "bypassare" il problema e non reinventare la ruota, utilizzando questo programma:
https://code.google.com/archive/p/ardesia/

che permette di disegnare sul desktop ... qualunque cosa ci sia visualizzato

PS: necessita di librerie non standard sulle ultime versioni di ubuntu: https://pkgs.org/download/libgsl0ldbl
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:disegnare sopra un video
« Risposta #5 il: 04 Dicembre 2018, 16:03:57 »
comunque penso di "bypassare" il problema e non reinventare la ruota, utilizzando questo programma:
https://code.google.com/archive/p/ardesia/

Ahééééé !   :bad:
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:disegnare sopra un video
« Risposta #6 il: 04 Dicembre 2018, 16:26:19 »
In alternativa alle risorse offerte dal Componente gb.media.form, potresti utilizzare le capacità dell'Oggetto WebView di eseguire un file audio/video, soprapponendovi quindi una DrawingArea per disegnare qualcosa.

L'Oggetto WebView fornisce automaticamente, fra l'altro, una risorsa per arrestare, porre in pausa e riprendere l'esecuzione del video.

Vediamo un esempio pratico:
Codice: [Seleziona]
Private WebView1 As WebView
Private da As DrawingArea
Private OldX As Single   
Private OldY As Single   
Private StartX As Single   
Private StartY As Single   
Private punti As New Integer[]


Public Sub Form_Open()

' Crea una "WebView" come oggetto GUI da usare per l'uscita video:
  With WebView1 = New WebView(Me)
    .X = 10
    .Y = 10
    .W = 480
    .H = 480
  End With
 
' Crea una DrawingArea sulla quale disegnare delle linee rosse:
  With da = New DrawingArea(Me) As "da"
    .X = WebView1.X
    .Y = WebView1.Y
    .W = WebView1.W
    .H = WebView1.H - 80
    .Background = Color.Transparent
  End With

End


Public Sub Button1_Click()
 
' Carica ed esegue il file video:
  WebView1.Url = "/percorso/del/file/video"
 
End


Public Sub da_Draw()   
 
  Dim i As Integer
 
  With Draw
    .Foreground = Color.Red
    .Line(StartX, StartY, OldX, OldY)             
    For i = 0 To punti.Max Step 4
      .Line(punti[i], punti[i + 1], punti[i + 2], punti[i + 3])         
    Next           
    .End         
  End With       

End 
 
 
Public Sub da_MouseDown()     
 
  StartX = Mouse.X   
  StartY = Mouse.Y   
  OldX = StartX   
  OldY = StartY         
 
End

 
Public Sub da_MouseMove()
 
  OldX = Mouse.X   
  OldY = Mouse.Y   

  da.Refresh()     
 
End   


Public Sub da_MouseUp()
 
  punti.Push(StartX)
  punti.Push(StartY)
  punti.Push(OldX)
  punti.Push(OldY)
   
End
« Ultima modifica: 04 Dicembre 2018, 16:38:17 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:disegnare sopra un video
« Risposta #7 il: 05 Dicembre 2018, 15:30:19 »
lo so ... avrei dovuto insistere, ma ho poco tempo.
come avrete notato dalla mia assenza sul forum ....

ps ho anche problemi con il mio gambas ..

comunque l'idea di usaer una risorsa web per fare il play di un video ... andando a cercare le proprieta' html del player interno mi sembra arzigogolato.

al limite forze gb.media diretto, senza usare l'oggetto mediaplayer fornito in gb.media.form e settando la superficie di rendering nella drawing area.

Ma troppo sbattimento :D
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:disegnare sopra un video
« Risposta #8 il: 05 Dicembre 2018, 17:43:28 »
al limite forze gb.media diretto, senza usare l'oggetto mediaplayer fornito in gb.media.form e settando la superficie di rendering nella drawing area.

Credi che non c'ho già provato ?
Se no, perché avrei scritto questo prima ?
Il problema sembra essere comunque determinato dall'uso del Componente gb.media.



una risorsa web per fare il play di un video ... andando a cercare le proprieta' html del player interno mi sembra arzigogolato.
Cosa intendi dire ?
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:disegnare sopra un video
« Risposta #9 il: 05 Dicembre 2018, 18:27:18 »
@allegfede
mi sembra che il suggerimento di vuott sia molto valido, il suo progetto funziona bene.
Lo hai provato? Hai anteposto "file:///" al percorso (path) del file?
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:disegnare sopra un video
« Risposta #10 il: 07 Dicembre 2018, 15:58:58 »
@allegfede
mi sembra che il suggerimento di vuott sia molto valido, il suo progetto funziona bene.
Lo hai provato? Hai anteposto "file:///" al percorso (path) del file?

file:/// e va in autostart ... ma non ho trovato pause stop rev ff etc.

vuott, scusa, non sapevo che ci avresti provato, sei troppo avanti :D
se corri, morirai stanco (motto degli sniper)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:disegnare sopra un video
« Risposta #11 il: 07 Dicembre 2018, 18:13:45 »

file:/// e va in autostart ... ma non ho trovato pause stop rev ff etc.


Non ho mai provato a far andare un video con WebView, ma a sentire vuott
Citazione
L'Oggetto WebView fornisce automaticamente, fra l'altro, una risorsa per arrestare, porre in pausa e riprendere l'esecuzione del video.
sembrerebbe fattibile, quindi ti tocca studiare  :D
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:disegnare sopra un video
« Risposta #12 il: 07 Dicembre 2018, 19:02:39 »
file:///
Non è necessario anteporre "file:///", è sufficiente impostare il normale percorso del file video.


... ma non ho trovato pause stop rev ff etc.
"pause stop rev ff etc" non sono Proprietà o Metodi della Classe WebView, diversamente queste sono risorse non gestibili direttamente via codice: esse possono essere utilizzate dall'utente finale solo quando il video è stato avviato e appaiono portando il mouse in basso.
(vedi file immagine allegato)



vuott, ...... sei troppo avanti

Chi crede in San Midi, programmerà in eterno !
 sanmidi
« Ultima modifica: 07 Aprile 2023, 16:30:41 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:disegnare sopra un video
« Risposta #13 il: 11 Dicembre 2018, 12:43:25 »
 :ok: :ok: :ok: :ok:
se corri, morirai stanco (motto degli sniper)