Visualizza post

Questa sezione ti permette di visualizzare tutti i post inviati da questo utente. N.B: puoi vedere solo i post relativi alle aree dove hai l'accesso.


Topics - allegfede

Pagine: 1 [2] 3 4 ... 12
16
OpenBar / assenza giustificata :D
« il: 26 Marzo 2019, 19:31:42 »
ragazi scusate l'assenza dal forum, ma ho dovuto insegnare JAVA ad una ragazza, che dal reparto comunicazione, hanno spostato a fare la programmatrice (su progetti enterprise) .....

e la cosa bella e' che io:
1) odio java
2) non programmo in java (vedi punto 1)

.... e quindi ho dovuto insegnare, portare avanti il mio normale lavoro quotidiano, studiare java nel tempo libero ..... :D

ma il corso e' quasi finito e tornero' piu' gamberoso che mai ;-)

PS: ed ho anche messo su un canale youtube .... se non bastasse

17
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.

18
Programmazione / audio mixer con gstremer e gb.media
« il: 08 Gennaio 2019, 20:15:04 »
al fine di testare il componente "mix" di gstreamer:
https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-audiomixer.html
sto facendo degli esperimenti che forse possono essere inficcati (termine ternano di dubbia moralita') nella wiki ;-)

in allegato un esempio che usa (per ora) due player separati che vengono mixati da pulse (come comportamento di default).

Domani provo a fare in modo che il mix sia interno alla app e che quindi ci sia un VUMETER unico che misura il livello di TUTTO quello che viene riprodotto dai player nell'applicazione.

19
oggi ho riaperto un vecchio programma per modificarlo un po' e non sono riuscito neanche ad avviarne l'interprestazione.

Mi spara un errore stranissimo: spinbox.step_write.439

Che non e' nel testo del mio sorgente! Forse che sia il codice interno del componente spinbox?

Vi allegherei il programma ma senza gli altri pezzi e' un po' inutile ... penso ...

20
Codice: [Seleziona]
Password = InputBox("inserisci la password di root", "root password")
          Shell "echo " & Password & " | sudo -S mkdir " & Dialog.Path & "/Backup"

prendendo spunto da questo thread:
http://www.gambas-it.org/smf/index.php?topic=6069.msg43024#msg43024

c'e' un modo per NON far visualizzare la password in chiaro :D

idee?

PS al sudo bisogna aggiungere lo switch -S (maiuscolo) se si vuole passare la password con la pipe (il carattere | )

21
Programmazione / errore nella pipeline di riproduzione di gstreamer
« il: 13 Dicembre 2018, 18:38:33 »
il programma in allegato fa' uso di:
jackaudio server (che deve essere istallato)
del gestore qjackctl (che deve essere installato)
di gstreamer e della aposita libreria di gestione gb.media
ed ovviamente di gambas.

alla pressione del tasto play dovrebbe connettersi alla "web radio" il cui URL avete impostato nelle preferenze (tasto in basso a destra), ma che adesso ho "hardcoded" ad un flusso che so essere funzionante ....

pero', mentre le pipeline lanciate da shell mi funzionano tutte:
gst-launch-1.0 uridecodebin uri=http://radiogalileo.it:8000//low_latency  ! audioconvert ! jackaudiosink
gst-launch-1.0 uridecodebin uri=http://radiogalileo.it:8000//low_latency  ! audioconvert ! level ! jackaudiosink
gst-launch-1.0 uridecodebin uri=http://radiogalileo.it:8000//low_latency  !  decodebin ! audioconvert ! level ! jackaudiosink

da codice non riesco neanche a connettere la sorgente con il resto degli elementi nella pipeline ...

ho spulciato gli esempi nella wiki e penso di non essermi allontanato troppo .... ma non riesco a venirne a capo ...

22
riciclando un po' di codice del mio registratore, ho provato a fare un player audio che non si interrompa mai o che si adatti agli imprevisti (mancanza della rete, errori di configurazione etc.)

pero' non capisco perche' non mi connette i "componenti" della pipeline .... (che da terminale vanno benissimo):
https://sourceforge.net/projects/pi2fm/files//?upload_just_completed=true

23
Programmazione / evitare il cambio di stato del "toggleButton"
« il: 11 Dicembre 2018, 16:29:48 »
Codice: [Seleziona]
Public Sub ToggleButton_PlayStop_Click()

  Debug ToggleButton_PlayStop.Value

  If ToggleButton_PlayStop.Value = False Then
    Try mp.Stop
    If Error Then
      Message.Error("error trying to stop the media player", "ok")
      Stop Event
    Endif
   
    ToggleButton_PlayStop.Text = "PLAY"
    ToggleButton_PlayStop.Picture = Stock["16/play"]
   
    Else
      Try mp.Start
      If Error Then
        Message.Error("Error trying to start media player!" & gb.crlf & "Please check if media URL is valid or other options.", "ok")
        Stop Event
      Endif
     
      ToggleButton_PlayStop.Text = "STOP"
      ToggleButton_PlayStop.Picture = Stock["16/stop"]
  Endif

End

ma lo stato cambia comunque ..... suppongo perche' il cambio di stato sia precedente alla routine relativa al "click"
sposto il tutto in un mousedown?

24
Programmazione / Finestra "messaggio" non bloccante
« il: 11 Dicembre 2018, 16:18:44 »
Salve ragazzi, come al solito metto sul forum delle idee nate da mie esigenze (che pero' suppongo possano essere comuni a molti), nella speranza di stimolare una discussione frizzante e portare a sviluppare una soluzione in modo collaborativo (e quindi con meno sforzo del singolo).

L'esigenza in questione e' realizzare un "oggetto" MESSAGE, estendendo magari quello di gambas che abbia un "timeout" alla sua visualizzazione.

E quindi, se normalmente visualizziamo a schermo un messaggio cosi':

message.error("attenzione, non puoi premere stop se il sistema e' impostato in modo automatico","ok")

aggiungere un campo "tempo" opzionale, che se impostato a 0 o non riempito e' PER_SEMPRE (e quindi come quello standard), ma che se messo a N, chiude la finestra del messaggio, dopo N secondi che e' stato visualizzato.

E' un'idea interessante? A Minisini potrebbe interessare?

quale sezione del forum sarebbe piu' indicata per un suggeriemnto all'estensione del componente base?

ciao :D

PS: tempo fa' lo feci in VB, mimando una normale finestra di dialogo windows, ma sinceramente un componente/oggetto integrato saebbe piu' elegante :D

25
Programmazione / 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

26
in allegato il progetto, che pero' era nato per rimpiazzare VLC come player degli streming delle mie sorgeti audio per il mio gateway ip2fm.

e' interessante che se si usa come sorgente audio il generatore di test, allora ovviamente il decoder MAD non deve essere incluso nella pipeline

e' invece indispensabile se si prende il file audio (per ora hardcoded)

la cosa incredibile pero' e' che con gli altri plug in sorgente, gli streaming audio non riesco proprio a farli riprodurre.

PS: se volete usare il server audio jack lo dovete lanciare ed avviare prima e poi connettere a mano i "fili virtuali".

27
Programmazione / form ridimensionabile ma senza bordo
« il: 15 Giugno 2018, 12:43:35 »
se faccio un form con le proprieta': border=true e resizable=true allora posso scalare la finestra senza aggiungere codice.
ma se metto border=false, il sistema operativo probabilemnte non intercetta il mouse sui bordi/angoli della finestra e quindi nessun resize ....

in pratica mi serve di poter eliminare il bordo alto della finestra e magari di poter fare la finestra con il fondo trasparente ... vorrei fare dei widget fighi :D

PS: da questa ricerca: http://www.gambas-it.org/smf/index.php?topic=2597.msg27491#msg27491 ho messo una png 10x10 trasparente come sfondo e mask a true .. ma vedo tutto nero nel form ....

28
Programmazione / [esempio] previsioni del tempo
« il: 14 Giugno 2018, 18:17:50 »
ma nella raccolta degli esempi, non c'era un programmino che si interfacciava ad openwathermap per visualizzare le previsioni del tempo? Non lo trovo piu'!.

Se io volessi "renderizzare" un codice html in una finestra, non basta inserire in una app gambas un controllo webview e farglileggere un file di testo in locale (in quel caso potrei usare il codice dei widget di openweathermap)?

https://openweathermap.org/widgets-constructor


 

29
ho un vettore di interi e mi serve di capire quale elemento ha il valore piu' alto (o piu' basso).

A parte banalmente scansioare il vettore elemento per elemento .. c'e' una classe o proprieta' predefinita di qualche oggetto vettore "custom"?

30
come forse sapete sto cercando di interfacciarmi con il framework multimediale MLT per riprodurre filmati in piu' modi complessi.

MLT e' alla base di tutti i programmi di montaggio video di Linux tipo KDEnLive o OpenShot.

Qualcosa penso di aver iniziato a capire, ma la strada e' lunga.

Per ora sono riuscito a capire come andarmi a trovare le informazioni.

Questo e' lo scheletro del programma gambas (che sto man mano implementando):

Codice: [Seleziona]
' Gambas class file


'esempio di classe esterna in C (per MLT)
Library "~/melted/20180208/lib/libmlt"

Public Struct mlt_profile_s
  description As Pointer
  frame_rate_num As Integer
  frame_rate_den As Integer
  width As Integer
  height As Integer
  progressive As Integer
  sample_aspect_num As Integer
  sample_aspect_den As Integer
  display_aspect_num As Integer
  display_aspect_den As Integer
  colorspace As Integer
  is_explicit As Integer
End Struct

Extern mlt_version_get_int() As Integer 'tanto per vedere se gambas da errore o sto veramente parlando con la libreria giusta

Extern mlt_factory_init() As Integer  'inizializza tutto il il framework

'Extern mlt_profile_init(profile_name As String) As Pointer  'crea un nuovo profilo in base ad una stringa di riferiemnto (per esempio dv_pal convertira' tutti i video in ingresso a 768x576 a 25 fps)
Extern mlt_profile_init(profile_name As String) As Mlt_profile_s  'crea un nuovo profilo in base ad una stringa di riferiemnto (per esempio dv_pal convertira' tutti i video in ingresso a 768x576 a 25 fps)

Extern mlt_producer_init(argomenti As String) As Integer  'inizializza il produttore in base ai file da leggere o lo stream da scaricare etc.
Extern mlt_producer_new(profilo As Mlt_profile_s) As Pointer  'crea una nuova "sorgente" di frame in base al profilo che gli ho passato e la lista degli argomenti

Extern mlt_consumer_new(profilo As Mlt_profile_s) As Pointer  'quello che fa uscire i frame (a schermo, sulla rete, su una scheda opportuna ... l'uscita)
Extern mlt_consumer_connect(produttore As Pointer, consumatore As Pointer) As Integer


Extern mlt_factory_close() As Integer

Public Sub Form_Open()
Dim Profilo_ingresso As New Mlt_profile_s
Dim Profilo_uscita As New Mlt_profile_s

Dim Producer As Pointer 'per esempio un file reader o un live o un rtmp .... chi genera i frame da interpretare
Dim Consumer As Pointer 'per esempio sdl o decklink ... chi renderizza nel modo opportuno i frame da mostrare a schermo

  Debug mlt_factory_init

  Debug "versione mlt:" & mlt_version_get_int()
 
  Profilo_ingresso = Mlt_profile_init("dv_pal")
 
  Profilo_uscita = mlt_profile_init("sdl")  'oppure per esempio decklink
 
  Producer = mlt_producer_new(Profilo_ingresso)
  Debug mlt_producer_init("path_del_file_video")
 
  consumer = mlt_consumer_new(Profilo_uscita) 'dopo le modifiche invece si pianta prima ... qui' ma senza arrivare al crash ...
 
 
  Debug mlt_consumer_connect(Producer, consumer)  'qui' si pianta(va) ....... con un crash ... ora non so ...
 
 
  Debug mlt_factory_close()


End


questo e' il programma python che sto prendendo come esempio:
Codice: [Seleziona]
#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Import required modules
import mlt
import time
import sys

# Start the mlt system
mlt.Factory().init( )

# Establish a profile
profile = mlt.Profile( )

# Create the producer
p = mlt.Producer( profile, sys.argv[1] )

if p:
# Create the consumer
c = mlt.Consumer( profile, "sdl" )

# Turn off the default rescaling
c.set( "rescale", "none" )

# Connect the producer to the consumer
c.connect( p )

# Start the consumer
c.start( )

# Wait until the user stops the consumer
while c.is_stopped( ) == 0:
time.sleep( 1 )
else:
# Diagnostics

questo un coso simile in PHP:
Codice: [Seleziona]
<?php
$filename = $argv[1];
dl("mlt.so");
mlt_factory_init(NULL);
$profile = new_profile("dv_ntsc");
$p = new_producer( $profile, $filename );
if ( $p ) {
$c = new_consumer( $profile, "sdl" );
consumer_connect( $c, $p );
$e = properties_setup_wait_for( $c, "consumer-stopped" );
consumer_start( $c );
properties_wait_for( $c, $e );
consumer_stop( $c );
$e = NULL;
$c = NULL;
}
$p = NULL;
$profile = NULL;
mlt_factory_close();
?>

in pratica le liberie e la loro definizione si trovano qui' (nei file .H):
https://www.mltframework.org/doxygen/files.html

e' si devono associare le funzioni con i tipi di file di ritorno e come si interfacciano ....

man mano che lo scheletro si forma aggiornero' il thread :D

Pagine: 1 [2] 3 4 ... 12