Ottenere informazioni generali su flussi multimediali con le funzioni esterne del API di Quvi

Da Gambas-it.org - Wikipedia.

La libreria libquvi analizza gli URL dei flussi multimediali per le applicazioni Internet che altrimenti dovrebbero utilizzare la piattaforma multimediale flash Adobe per accedere a tali flussi. Esempi tipici sono i diversi host multimediali, come YouTube, per i video che utilizzano questa "piattaforma multimediale" per fornire i loro contenuti.

Mediante la libreria libquvi è possibile anche ottenere alcune informazioni generali inerenti ai predetti flussi multimediali.

E' necessario avere installata nel sistema e richiamare in Gambas la libreria condivisa: "libquvi.so.7.0.1 ".

Mostriamo un semplice esempio pratico:

Library "libquvi:7.0.1"

Private Const QUVI_OK As Integer = 0
Private Const QUVIPROPERTY_STRING As Integer = 1048576
Private Const QUVIPROPERTY_LONG As Integer = 2097152
Private Const QUVIPROPERTY_DOUBLE As Integer = 3145728

' QUVIcode quvi_init(quvi_t *session)
' Creates a new session.
Private Extern quvi_init(session As Pointer) As Integer

' char *quvi_strerror(quvi_t 	session, QUVIcode code)
' Returns a corresponding error message to the return code.
Private Extern quvi_strerror(session As Pointer, code As Integer) As Pointer

' QUVIcode quvi_parse(quvi_t session, char *url, quvi_media_t *media)
' Parses an URL.
Private Extern quvi_parse(session As Pointer, url As String, media As Pointer) As Integer

' QUVIcode quvi_getprop(quvi_media_t media, QUVIproperty property, ...)
' Returns a media property.
Private Extern quvi_getprop(media As Pointer, _property As Integer, prop As Pointer)

' void quvi_parse_close(quvi_media_t *media)
' Releases a previously allocated media handle.
Private Extern quvi_parse_close(media As Pointer)

' void quvi_close(quvi_t *session)
' Closes a previously started session.
Private Extern quvi_close(session As Pointer)


Public Sub Main()
 
 Dim qu, qm, p As Pointer
 Dim qc As Integer
 Dim url As String
 Dim f As Float
 Dim l As Long
 
 url = "https://www.youtube.com/watch?v=Gu9sqZZOiR0"
 
 qc = quvi_init(VarPtr(qu))
 GestioneErrore(qu, qc)
 
 qc = quvi_parse(qu, url, VarPtr(qm))
 GestioneErrore(qu, qc)
 
' Estrae alcune proprietà del flusso multimediale prescelto:
 quvi_getprop(qm, QUVIPROPERTY_STRING + 1, VarPtr(p))
 Print "Host (or website) ID: "; String@(p)
 quvi_getprop(qm, QUVIPROPERTY_STRING + 2, VarPtr(p))
 Print "Page URL:             "; String@(p)
 quvi_getprop(qm, QUVIPROPERTY_STRING + 3, VarPtr(p))
 Print "Page title:           "; String@(p)
 quvi_getprop(qm, QUVIPROPERTY_STRING + 4, VarPtr(p))
 Print "Media ID:             "; String@(p)
 quvi_getprop(qm, QUVIPROPERTY_STRING + 5, VarPtr(p))
 Print "Media URL:            "; String@(p)
 quvi_getprop(qm, QUVIPROPERTY_DOUBLE + 6, VarPtr(f))
 Print "Media content length: "; f; " byte"
 quvi_getprop(qm, QUVIPROPERTY_STRING + 7, VarPtr(p))
 Print "Media content-type:   "; String@(p)
 quvi_getprop(qm, QUVIPROPERTY_STRING + 8, VarPtr(p))
 Print "File suffix:          "; String@(p)
 quvi_getprop(qm, QUVIPROPERTY_LONG + 9, VarPtr(l))
 Print "Last response code:   "; l
 quvi_getprop(qm, QUVIPROPERTY_STRING + 10, VarPtr(p))
 Print "Requested format:     "; String@(p)
 quvi_getprop(qm, QUVIPROPERTY_STRING + 11, VarPtr(p))
 Print "Start time for media: "; String@(p)
 quvi_getprop(qm, QUVIPROPERTY_STRING + 12, VarPtr(p))
 Print "Media thumbnail URL:  "; String@(p)
 quvi_getprop(qm, QUVIPROPERTY_DOUBLE + 13, VarPtr(f))
 Print "Media duration:       "; Date(0, 0, 0, 0, 0, 0, f)
 
 quvi_parse_close(VarPtr(qm))
 quvi_close(VarPtr(qu))
  
End


Private Procedure GestioneErrore(q As Pointer, err As Integer)
 
 Dim s As String = String@(quvi_strerror(q, err))
 If err > QUVI_OK Then
   quvi_close(VarPtr(q))
   Error.Raise("Errore: " & s)
 Endif
 
End


Riferimenti