|
Prima di realizzare il player,
bisogna sapere com'è fatto un disco DVD. Trascurando gli aspetti fisici del supporto ci
interessa più che altro parlare del formato DVD-Video (diverso dagli altri formati DVD)
che caratterizza tutti quei dischi riproducibili sia sul PC (tramite un software di
decodifica) sia sui lettori home-video casalinghi. Il file system di un DVD è differente
da quello di un CD-ROM perché dispone di un layout di controllo che consente di muoversi
allinterno del disco navigando nei titoli e nei capitoli. Questo proprio grazie alla
struttura che li contraddistingue: un media file è formato infatti da una lista di PGC
(catene di programmi), ognuna delle quali è formata a sua volta da una lista di celle che
compongono lunità fondamentale del DVD, il file VOB (video object). In un
file VOB può essere definito un grande raccoglitore dove vi si trova un po tutto:
esso può raggiungere la dimensione limite di 1 GB ed è formato da altri file VOB più
piccoli, dallaudio in formato Dolby AC3 e in diverse lingue, dal film vero e proprio
in formato compresso MPEG2. Quando accediamo a un DVD usando Esplora Risorse dal nostro
PC, troveremo nella root directory del disco la cartella basilare VIDEO_TS, così
strutturata:
TITOLO Ogni Titolo è composto da gruppi di file caratterizzati da estensioni IFO e VOB:
essi contengono il film vero e proprio. I nomi assegnati ad ogni traccia sono VTS_01_n per
la prima, VTS_02_n per la seconda e così via fino a 99 (dove n è un numero che va da 0 a
9). Ognuna di queste tracce non può superare il gigabyte.
IFO, lindice degli stream video I file con estensione IFO contengono informazioni di
controllo del flusso video. Più precisamente: dato che un film è composto da più file
VOB, lIFO ne stabilisce lordine di esecuzione. Le informazioni binarie
presenti in questi file possono venire considerate a quelle nei file EXE eseguibili
comunemente utilizzati da Windows; è però opportuno sottolineare che il lettore non può
accedere in alcun modo, al processore (CPU) o alla memoria RAM. Uno standard così
definito prende il nome di architettura data driver ovvero guidata dai dati, proprio per
le limitazioni di accesso imposte.
CAPITOLO (CHAPTER) Allinterno di ogni file VTS_mm_n.VOB, sono presenti i capitoli
del titolo DVD. E' grazie a loro che possiamo scorrere avanti e indietro velocemente il
DVD passando da un capitolo ad un altro. Il numero massimo di capitoli in un titolo
è di 999.
PROGRAM Ogni Capitolo contiene un max. di 99 Cell o Segment che a loro volta incorpèorano
i Program: questi sono lelemento base di uno stream video. Ogni Program riporta le
informazioni che indicano al lettore quando e come le porzioni di video devono
essere presentate.
L' applicazione
Cosa serve per scrivere lapplicazione in grado di leggere un DVD-Video? Le
librerie di cui avremo bisogno si trovano nelle DirectX 8.0 e in precisamente nel
componente chiamato DirectShow, che rappresenta un elemento di alto livello
poiché si appoggia alle altre DirectX come DirectSound. DirectShow fornisce un componente
base chiamato DVD Navigator che facilita le operazioni di accesso al disco e di
navigazione nei capitoli del film: con questo componente è possibile progettare il nostro
player totalmente indipendente e completo di ogni funzione senza dover fare riferimento
alle specifiche del formato DVD, che sono già integrate nelle librerie di
Microsoft..Microsoft mette a disposizione dei programmatori lActiveX chiamato
MsWebDVD che può essere facilmente integrato nelle applicazioni scritte in Visual Basic e
addirittura nelle pagine web grazie al linguaggio script E importante sottolineare
che DirectShow fornisce solo loccorrente per accedere e navigare sul DVD-Video, ciò
significa che se il sistema Windows in uso non dispone dei codec di decodifica del formato
MPEG2, non sarà in grado di usare applicazioni DVD scritte con DirectShow (i decoder
MPEG2 hardware e software sono componenti venduti separatamente e non inclusi nelle
DirectX). |
Se
si modifica il concetto di buffer si può trovarne un'altra naturale applicazione: l'input
e output di un file. Questo non è un forzamento, perchè la cache è sì una locazione di
memoria temporanea ma può essere ricavata riservando una parte della RAM oppure
usufruendo di dispositivi di memoria di massa ( Hard Disk). Infatti, creando un file
su di un disco si ottine il risultato di avere a disposizione un buffer . Si deve
considerare i file come stream di dati. Java supporta sia la lettura che la scrittura di
file mediante la creazione di flussi utilizzando le classi FileInputStream e
FileOutputStream.
FileInputStream
Cominciamo creando l' applicazione VB inserendo dal menù Progetti il collegamento alla
libreria MSWEBDVD allinterno dei Componenti del programma compariranno così nella
barra degli strumenti due nuovi componenti etichettati MSWEBDVD e
MSDVDADM: per il momento ci interessa solo il primo. Creiamo quindi un oggetto
di tipo MSWEBDVD sul form e accanto a ci inseriamo 4 pulsanti etichettati
Play, Pause, Stop e Eject. Il codice VB da
assegnare a questi bottoni è molto banale ed è questo qua di seguito
Private Sub Command1_Click()
MSWebDVD1.Play
End Sub
Private Sub Command2_Click()
MSWebDVD1.Pause
End Sub
Private Sub Command3_Click()
MSWebDVD1.Stop
End Sub
Private Sub Command4_Click()
MSWebDVD1.Eject
End Sub
|
Risoluzione video e full-screen mode
Ora possiamosbizzarrirci nellimplementare funzioni particolari nel nostro Player.
Una prima cosa da decidere è la grandezza visiva della nostra applicazione: quale
risoluzione conviene usare? Non è una risposta facile da darsi, perchè la resa
dipende dal tipo di formato codificato sul DVD (anamorfico, widescreen ecc.). Lunica
cosa sicura è che il controllo ActiveX di DirectShow riesce ad adattare la riproduzione
alla grandezza del controllo creato: se su form è presente un oggetto MSWEBDVD 320x200,
il film verrà riprodotto usando questa risoluzione. E questa una limitazione player
che stiamo costruendo, infatti luso di risoluzione sbagliate spesso causa qualche
difetto nella riproduzione del DVD (compaiono strane strisce verdi) e a volte errori di
sistema di Windows (schermate blu, per intenderci). E quindi consigliabile procedere
in questo modo
definire un controllo MSWEBDVD sul form nel formato standard tipo 320 x 240;
predisporre un tasto per passare alla riproduzione full-screen prevista
dal controllo ActiveX;
implementare la riproduzione di ogni disco DVD nel suo formato video nativo (vanno usati i
metodi GetVideoSize e SetClipVideoRect).
Per provare lebbrezza del full-screen mode basta semplicemente inserire
un checkbox di Visual Basic e passare il suo stato (attivo/disattivo) al controllo
MSWEBDVD prima del comando play questo il codice:
Private Sub Form_Load()
i valori di larghezza e altezza dipendono
anche dalla risoluzione video usata
MSWebDVD1.Width = 320 * 16
MSWebDVD1.Height = 240 * 16
End Sub
Private Sub Command1_Click()
MSWebDVD1.FullScreenMode = Check1.Value
MSWebDVD1.Play
End Sub |
|
I
controlli audio e informazioni varie
Ecco altri esempi di cosa è possibile implementare col controllo MSWEBDVD, alcuni comandi
audio come il mute e la regolazione del bilanciamento e infine una piccola routine che
legge le informazioni caratteristiche del disco DVD.
...
fileF = new File( Prova.pan );
fileF.delete();
...
|
File come Filtri
Mostriamo come usare i File per costruire un filtro sui flussi. Per fare ciò ci si
appoggia a un oggetto SequenceInputStream per realizzare il buffering, usato per generare
un unico input partendo da due separati.
Implementazione del tasto MUTE
bisogna creare un normale pulsante VB
Private Sub Command5_Click()
MSWebDVD1.Mute = Not (MSWebDVD1.Mute)
End Sub
Implementazione della Regolazione Bilanciamento
bisogna creare un scrollbar orizzontale
con valori che variano tra 10.000 (min) e +10.000
(max)
Private Sub HScroll1_Change()
MSWebDVD1.Balance = HScroll1.Value
End Sub
Legge le info del disco in uso
Private Sub Command6_Click()
Valore dellaspectratio (1,33 per 4:3 / 1,78 per
16:9)
Text1.Text = Str(MSWebDVD1.AspectRatio)
Lato del disco (1 per LatoA / 2 per LatoB)
DiscSide = MSWebDVD1.CurrentDiscSide
If DiscSide = 1 Then
Text2.Text = "A"
Else: Text2.Text = "B"
End If
Numero totale di titoli presenti sul disco
Text3.Text = MSWebDVD1.TitlesAvailable
Lingua audio predefinita del disco
viene letto un codice nel formato LCID
Text4.Text = MSWebDVD1.DefaultAudioLanguage
End Sub
|
DVD Embedding su HTML
Per concludere vediamo un saggio della potenza di MSWEBDVD e di cosa si può fare, ecco il
codice Javascript da utilizzare per realizzare un dvd-player integrato su una pagina web
si tratta di un lettore DVD senza nulla da invidiare a quelli professionali -
creato su una pagina HTML grazie allembedding degli oggetti ActiveX e ai Class-ID.
<HTML>
<CENTER>
<H1> DVD Player Embedded on HTML </H1>
</CENTER>
<OBJECT CLASSID=clsid:38EE5CEE-4B62-11D3-854F-
00A0C9C898E7 ID=DVD
STYLE="height:369px; width:740px">
<PARAM NAME="BackColor" VALUE="1048592">
<PARAM NAME="EnableResetOnStop" VALUE="-1">
<PARAM NAME="ColorKey" VALUE="1048592">
</OBJECT>
<INPUT ID=button1 NAME="button1" TYPE=
button VALUE="Play" onClick='Play();'>
<INPUT ID=button2 NAME="button2" TYPE=
button VALUE="Pause" onClick='Pause();'>
<INPUT ID=button2 NAME="button3" TYPE=
button VALUE="Stop" onClick='Stop();'>
<INPUT ID=button2 NAME="button4" TYPE=
button VALUE="Eject" onClick='Ej();'>
<SCRIPT LANGUAGE="JScript">
function Play()
{ DVD.Play(); }
function Pause()
{ DVD.Pause(); }
function Stop()
{ DVD.Stop(); }
function Ej()
{ DVD.Eject();}
</SCRIPT>
</HTML>
|
Se durante la
programmazione dellapplicazione DVD con DirectShow vi dovreste imbattere in
errori di sistema (magari seguito da una schermata blu) non cè da allarmarsi, è
naturale, si tratta di alcuni problemi di compatibilità riscontrati anche da me. Può
dipendere dai tre parametri (DMA/Disconnetti/Sincronizza) del lettore DVD, modificabili
attraverso il Pannello di Controllo di Windows, altre volte dipende che si esce
dallapplicativo che usa MSWEBDVD senza inviare il comando STOP dal lettore.
Decodifica dell'MPEG-2 DirectShow è la
libreria che permette di realizzare applicazioni per riprodurre i DVD-Video tuttavia
richiede la presenza dei codec di decodifica per lo standard MPEG2, che vanno installati a
parte. Senza questi codec, pur realizzando unapplicazione perfetta che usa
DirectShow, non si riuscirà comunque a riprodurre un disco DVD. |
|
|