Autore Topic: (N-ESIMA) domanda su exec e shell  (Letto 686 volte)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.266
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:(N-ESIMA) domanda su exec e shell
« Risposta #15 il: 04 Ottobre 2016, 12:23:48 »
Qualcosa ho trovato qui':
https://github.com/FFmpeg/FFmpeg/tree/master/doc/examples


Quale ti servirebbe di quei programmi ?  "transcoding.c" ?


Ad ogni modo ho avuto già a che fare con la famiglia della libreria libav: ...neppure la libreria di ALSA è a quel livello di complessità !   :-X
« 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:(N-ESIMA) domanda su exec e shell
« Risposta #16 il: 04 Ottobre 2016, 15:14:31 »
un mio amico greco che sta programmando un server di playback open source (cBroadcast) ed un mixer video sempre open e' convinto che searva anche a pilotare gli sviluppatori verso le assistenze premium (via skype e a pagamento).

.... vi terro' informati sugli sviluppi.
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.266
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:(N-ESIMA) domanda su exec e shell
« Risposta #17 il: 04 Ottobre 2016, 15:24:58 »
Comunque sia, fai una prova con quelle righe di C che t'ho scritto.
In sostanza nell'unico parametro della funzione esterna Lancia_Comando( ) devi passare la medesima riga che passavi a Shell.
« 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:(N-ESIMA) domanda su exec e shell
« Risposta #18 il: 05 Ottobre 2016, 20:41:47 »
Preliminarmente si potrebbe esperire una cosa analoga a questa:
Codice: [Seleziona]
' int Lancia_Comando(const char * comando)
' Chiama la libreria ad hoc per l'uso della funzione esterna "system()"
Private Extern Lancia_Comando(comando As String) As Integer In "/tmp/libadhoc"


Public Sub Main()

  Dim s As String
 
    Creaso()
   
    s = "cvlc /percorso/file/audio"
   
    Lancia_Comando(s)
   
End


Private Procedure Creaso()
 
  File.Save("/tmp/libadhoc.c", "#include <stdlib.h>\n\n" &
            "int Lancia_Comando(const char * comando) {\n\n" &
            "   system(comando);\n\n" &
            "   return (0);\n\n}")
 
  Shell "gcc -o /tmp/libadhoc.so /tmp/libadhoc.c -shared -fPIC" Wait
 
End


nella fretta m'era sfuggita questa tua perla ....

PERFETTO! FUNZIONA ALLA GRANDE. Ora mi faccio il parser del file di statistiche per eportare lo stato dell'operazione :D
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.266
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:(N-ESIMA) domanda su exec e shell
« Risposta #19 il: 05 Ottobre 2016, 22:39:35 »
nella fretta m'era sfuggita questa tua perla ....

PERFETTO! FUNZIONA ALLA GRANDE.
 
     
....e poi dicono che l'integrazione di più linguaggi non offre opportunità superiori.   



Ora mi faccio il parser del file di statistiche per eportare lo stato dell'operazione
Aspetta, non correre, per due motivi:
1) ......morirai stanco;
2) proviamo a "gambasizzare" un po' di più quel codice, effettuando una chiamata diretta della funzione esterna system( ) mediante Extern.

Il codice che devi provare, ora, è questo:
Codice: [Seleziona]
' int system(const char *__command)
' Execute the given line as a shell command.
Private Extern system_C(__command As String) As Integer In "libc:6" Exec "system"


Public Sub Main()

' Nel parametro va inserita - come stringa - la tua intera riga di comando con ffmpeg:
  system_C("riga_di_comando")
 
End

..fammi sapere se così funziona.


« Ultima modifica: 05 Ottobre 2016, 22:53:32 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:(N-ESIMA) domanda su exec e shell
« Risposta #20 il: 19 Ottobre 2016, 12:29:46 »
con la chiamata di sistema funziona la codifica, MA non mi intercetta (nella mia routine) lo stato dell'operazione (lettura del file delle statistiche).
Questo comporta che mi partono contemporaneamente le n codifiche degli n file selezionati (e non uno per volta, n volte).

Devo controllare il ciclo del check sulle righe del file delle statistiche.
se corri, morirai stanco (motto degli sniper)

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:(N-ESIMA) domanda su exec e shell
« Risposta #21 il: 20 Ottobre 2016, 11:11:48 »
ho leggermente modificato il ciclo di controllo dell'ultima riga (ora la penultima) del file delle statistiche di ffmpeg:

Codice: [Seleziona]
Public Sub Timer_Encode_status_Timer()
Dim UltimaRiga As String
Dim RigaPrecedente As String
Dim Riga As String
Dim fl As File

  'magari semplicemente ffmpeg non ha ancora creato il file delle statistiche .... aspetto qualche ciclo
  If Exist(FileChooser_Destinazione.Dir & "/MFRfile.txt") = False Then Return
 
  'in questo caso il file esiste e inizio ad analizzarlo 
  fl = Open FileChooser_Destinazione.Dir & "/MFRfile.txt" For Read
 
  ' UltimaRiga = ""
  ' RigaPrecedente = ""
  For Each Riga In fl.Lines
      If InStr(riga, "?") > 0 Then RigaPrecedente = riga
  Next
  UltimaRiga = riga
 
 
    'L'ultima lettura contiene i dati dell'ultima riga del file di testo (e se e' uguale a quella prima significa che ha finito):
    If (RigaPrecedente <> "") And (Label_statistiche.Text = RigaPrecedente) Then
      'ha finito la codifica di questo file e passa al prossimo
      Timer_Encode_status.Stop
      fl.Close
      Else
        Label_statistiche.Text = RigaPrecedente
        fl.Close
    Endif

End

questo perche' la riga VALIDA deve finire con un ? (non sono riuscito a fargli intercettare il CR o LF) mentre alle volte mi considerava l'operazione conclusa intercettando due righe (che sarebbero diventate diverse) che pero' erano entrambe 'frame = ' (ffmpeg non aveva ancora scritto il numero del frame processato .... che ovviamente incrementa).
se corri, morirai stanco (motto degli sniper)