Sauron Software Projects Repository
JAVE
Presentazione Documentazione Download

Manuale di JAVE

Prima di cominciare

Per utilizzare JAVE nella tua applicazione Java, devi aggiungere il file jave-1.0.jar al CLASSPATH.

JAVE richiede un ambiente di esecuzione Java J2SE versione 1.4 o successiva.

JAVE, inoltre, utilizza una versione di ffmpeg precompilata per Windows e Linux su piattaforma hardware i386 a 32 bit. Questo non significa che JAVE non possa funzionare su altre combinazioni, ma per farlo è nessario fornire un compilato di ffmpeg alternativo a quello incluso nella distribuzione. Maggiori dettagli sono riportati nel paragrafo "Cambiare l'eseguibile di ffmpeg in uso".

Codificare i flussi audio/video

La principale classe di JAVE è it.sauronsoftware.jave.Encoder. Gli oggetti di tipo Encoder contengono una serie di metodi utili per avere informazioni e per effettuare le operazioni di transcodifica dei flussi multimediali. Prima di ogni altra cosa, pertanto, è necessario istanziare la classe Encoder, con una chiamata del tipo:

Encoder encoder = new Encoder();

Una volta creata l'istanza, il metodo per effettuare l'operazione di transcodifica è encode(). La firma del metodo è:

public void encode(java.io.File source,
                   java.io.File target,
                   it.sauronsoftware.jave.EncodingAttributes attributes)
            throws java.lang.IllegalArgumentException,
                   it.sauronsoftware.jave.InputFormatException,
                   it.sauronsoftware.jave.EncoderException

Il primo argomento, source, è il file sorgente da decodificare. Il secondo argomento, target, costituisce il nuovo file da creare, con il flusso multimediale ricodificato secondo richiesta. L'argomento attributes, di tipo it.sauronsoftware.jave.EncodingAttributes, è una struttura dati che incapsula tutti gli argomenti necessari per la ricodifica del flusso.

Si osservi che la chiamata al metodo è bloccante: il metodo ritorna solo al termine dell'operazione di codifica (o dopo un eventuale fallimento della stessa).

Attributi di codifica

L'encoder di JAVE accetta gli attributi di codifica dei flussi multimediali attraverso un'istanza della classe it.sauronsoftware.jave.EncodingAttributes. La classe mette a disposizione i seguenti metodi:

Attributi di codifica audio

Gli attributi di codifica audio devono essere espressi attraverso un oggetto di tipo it.sauronsoftware.jave.AudioAttributes. Gli oggetti di questo tipo permotto di impostare gli attributi di ricodifica audio mediante i seguenti metodi:

Attributi di codifica video

Gli attributi di codifica video devono essere espressi attraverso un oggetto di tipo it.sauronsoftware.jave.VideoAttributes. Gli oggetti di questo tipo permotto di impostare gli attributi di ricodifica video mediante i seguenti metodi:

Monitorare l'operazione di codifica

Le operazioni di codifica possono essere monitorate durante il loro svolgimento mediante un meccanismo ad eventi basato sul paradigma dei listener. JAVE definisce l'interfaccia it.sauronsoftware.jave.EncoderProgressListener che può essere implementata per generare degli oggetti listener da fornire poi all'encoder, attraverso la variante del metodo encode così formulata:

public void encode(java.io.File source,
                   java.io.File target,
                   it.sauronsoftware.jave.EncodingAttributes attributes,
                   it.sauronsoftware.jave.EncoderProgressListener listener)
            throws java.lang.IllegalArgumentException,
                   it.sauronsoftware.jave.InputFormatException,
                   it.sauronsoftware.jave.EncoderException

L'inrefaccia EncoderProgressListener richiede la definizione dei seguenti metodi:

Fallimento dell'operazione di codifica

L'operazione di codifica può fallire. In tal caso in metodo encode() propaga un'eccezione. A seconda di quel che è accaduto, l'eccezione è differente:

Ottenere informazioni su un file multimediale

JAVE permette di avere informazioni su un file multimediale esistente prima ancora di ricodificarlo, attraverso il metodo getInfo() degli oggetti Encoder, così definito:

public it.sauronsoftware.jave.MultimediaInfo getInfo(java.io.File source)
                                             throws it.sauronsoftware.jave.InputFormatException,
                                                    it.sauronsoftware.jave.EncoderException

Gli oggetti it.sauronsoftware.jave.MultimediaInfo, che a loro volta contengono oggetti it.sauronsoftware.jave.AudioInfo e it.sauronsoftware.jave.VideoInfo, sono speculari rispetto agli oggetti di tipo EncodingAttributes, AudioAttributes e VideoAttributes, e dispongono di metodi per il recupero di informazioni quali il formato del contenitore multimediale, i decoder in grado di decodificare i flussi, informazioni su bitrate, samplerate, framerate ecc. Questi metodi possono essere facilmente consultati nella documentazione javadoc delle API di JAVE, fornita nella distribuzione stessa della libreria.

Cambiare l'eseguibile di ffmpeg in uso

JAVE non è una libreria pure Java, ma un wrapper su un progetto libero chiamato ffmpeg (http://ffmpeg.mplayerhq.hu/). Il codice di ffmpeg è in C, pertanto non ha la portabilità di Java ed è necessario disporre di una versione compilata del tool per ogni combinazione hardware/software sulla quale si vuole impiegare JAVE. La distribuzione di JAVE comprende due versioni precompilate di ffmpeg, una per Windows e una per Linux, entrambe per piattaforme hardware di tipo i386 con architettura a 32 bit. Ciò copre la maggior parte delle esigenze. In piattaforme differenti da quelle elencate è necessario generare un compilato di ffmpeg. I sorgenti e le istruzioni per farlo sono disponibili nel sito Web del progetto. Una volta ottenuto il compilato è necessario agganciarlo all'encoder di JAVE. E' possibile farlo fornendo al costruttore di Encoder un'istanza della classe astratta it.sauronsoftware.jave.FFMPEGLocator. Per far ciò è necessario estendere FFMPEGLocator andando a definire il metodo con firma:

public java.lang.String getFFMPEGExecutablePath()

Il metodo deve restituire un percorso sul file system locale che conduce all'eseguibile di ffmpeg che si intende utilizzare.

Successivamente l'encoder di JAVE può essere istanziato con una chiamata del tipo:

Encoder encoder = new Encoder(new MyFFMPEGExecutableLocator())

La stessa tecnica può essere utilizzata anche sulle piattaforme già supportate dai precompilati presenti in JAVE, al solo scopo di modificare la versione di ffmpeg in uso.

Formati supportati

Le versioni di ffmpeg precompilate e distribuite insieme a JAVE supportato i seguenti formati.

In lettura

FormatoDescrizione
4xm4X Technologies format
MTVMTV format
RoQId RoQ format
aacADTS AAC
ac3raw ac3
aiffAudio IFF
alawpcm A law format
amr3gpp amr file format
apcCRYO APC format
apeMonkey's Audio
asfasf format
auSUN AU Format
aviavi format
avsAVISynth
bethsoftvidBethesda Softworks 'Daggerfall' VID format
c93Interplay C93
daudD-Cinema audio format
dsicinDelphine Software International CIN format
dtsraw dts
dvDV video format
dxadxa
eaElectronic Arts Multimedia Format
ea_cdataElectronic Arts cdata
ffmffm format
film_cpkSega FILM/CPK format
flacraw flac
flicFLI/FLC/FLX animation format
flvflv format
gifGIF Animation
gxfGXF format
h261raw h261
h263raw h263
h264raw H264 video format
idcinId CIN format
image2image2 sequence
image2pipepiped image2 sequence
ingenientIngenient MJPEG
ipmovieInterplay MVE format
libnutnut format
m4vraw MPEG4 video format
matroskaMatroska File Format
mjpegMJPEG video
mmAmerican Laser Games MM format
mmfmmf format
mov,mp4,m4a,3gp,3g2,mj2QuickTime/MPEG4/Motion JPEG 2000 format
mp3MPEG audio layer 3
mpcmusepack
mpc8musepack8
mpegMPEG1 System format
mpegtsMPEG2 transport stream format
mpegtsrawMPEG2 raw transport stream format
mpegvideoMPEG video
mulawpcm mu law format
mxfMXF format
nsvNullSoft Video format
nutnut format
nuvNuppelVideo format
oggOgg format
psxstrSony Playstation STR format
rawvideoraw video format
redirRedirector format
rmrm format
rtspRTSP input format
s16bepcm signed 16 bit big endian format
s16lepcm signed 16 bit little endian format
s8pcm signed 8 bit format
sdpSDP
shnraw shorten
siffBeam Software SIFF
smkSmacker Video
solSierra SOL Format
swfFlash format
thpTHP
tiertexseqTiertex Limited SEQ format
ttatrue-audio
txdtxd format
u16bepcm unsigned 16 bit big endian format
u16lepcm unsigned 16 bit little endian format
u8pcm unsigned 8 bit format
vc1raw vc1
vmdSierra VMD format
vocCreative Voice File format
wavwav format
wc3movieWing Commander III movie format
wsaudWestwood Studios audio format
wsvqaWestwood Studios VQA format
wvWavPack
yuv4mpegpipeYUV4MPEG pipe format

In scrittura

FormatoDescrizione
3g23gp2 format
3gp3gp format
RoQId RoQ format
ac3raw ac3
adtsADTS AAC
aiffAudio IFF
alawpcm A law format
amr3gpp amr file format
asfasf format
asf_streamasf format
auSUN AU Format
aviavi format
crccrc testing format
dvDV video format
dvdMPEG2 PS format (DVD VOB)
ffmffm format
flacraw flac
flvflv format
framecrcframecrc testing format
gifGIF Animation
gxfGXF format
h261raw h261
h263raw h263
h264raw H264 video format
image2image2 sequence
image2pipepiped image2 sequence
libnutnut format
m4vraw MPEG4 video format
matroskaMatroska File Format
mjpegMJPEG video
mmfmmf format
movmov format
mp2MPEG audio layer 2
mp3MPEG audio layer 3
mp4mp4 format
mpegMPEG1 System format
mpeg1videoMPEG video
mpeg2videoMPEG2 video
mpegtsMPEG2 transport stream format
mpjpegMime multipart JPEG format
mulawpcm mu law format
nullnull video format
nutnut format
oggOgg format
psppsp mp4 format
rawvideoraw video format
rmrm format
rtpRTP output format
s16bepcm signed 16 bit big endian format
s16lepcm signed 16 bit little endian format
s8pcm signed 8 bit format
svcdMPEG2 PS format (VOB)
swfFlash format
u16bepcm unsigned 16 bit big endian format
u16lepcm unsigned 16 bit little endian format
u8pcm unsigned 8 bit format
vcdMPEG1 System format (VCD)
vobMPEG2 PS format (VOB)
vocCreative Voice File format
wavwav format
yuv4mpegpipeYUV4MPEG pipe format

Codec e decoder compresi

Le versioni di ffmpeg precompilate e distribuite insieme a JAVE comprendono i seguenti codec e decoder.

Decoder audio

adpcm_4xmadpcm_adxadpcm_ctadpcm_eaadpcm_ea_r1
adpcm_ea_r2adpcm_ea_r3adpcm_ea_xasadpcm_ima_amvadpcm_ima_dk3
adpcm_ima_dk4adpcm_ima_ea_eacsadpcm_ima_ea_seadadpcm_ima_qtadpcm_ima_smjpeg
adpcm_ima_wavadpcm_ima_wsadpcm_msadpcm_sbpro_2adpcm_sbpro_3
adpcm_sbpro_4adpcm_swfadpcm_thpadpcm_xaadpcm_yamaha
alacapeatrac 3cookdca
dsicinaudioflacg726imcinterplay_dpcm
liba52libamr_nblibamr_wblibfaadlibgsm
libgsm_msmace3mace6mp2mp3
mp3adump3on4mpc sv7mpc sv8mpeg4aac
nellymoserpcm_alawpcm_mulawpcm_s16bepcm_s16le
pcm_s16le_planarpcm_s24bepcm_s24daudpcm_s24lepcm_s32be
pcm_s32lepcm_s8pcm_u16bepcm_u16lepcm_u24be
pcm_u24lepcm_u32bepcm_u32lepcm_u8pcm_zork
qdm2real_144real_288roq_dpcmshorten
smackaudsol_dpcmsonictruespeechtta
vmdaudiovorbiswavpackwmav1wmav2
ws_snd1xan_dpcm   

Codec audio

ac3adpcm_adxadpcm_ima_wavadpcm_msadpcm_swf
adpcm_yamahaflacg726libamr_nblibamr_wb
libfaaclibgsmlibgsm_mslibmp3lamelibvorbis
mp2pcm_alawpcm_mulawpcm_s16bepcm_s16le
pcm_s24bepcm_s24daudpcm_s24lepcm_s32bepcm_s32le
pcm_s8pcm_u16bepcm_u16lepcm_u24bepcm_u24le
pcm_u32bepcm_u32lepcm_u8pcm_zorkroq_dpcm
sonicsoniclsvorbiswmav1wmav2

Decoder video

4xm8bpsVMware videoaascamv
asv1asv2avsbethsoftvidbmp
c93camstudiocamtasiacavscinepak
cljrcyuvdnxhddsicinvideodvvideo
dxaffv1ffvhuffflashsvflic
flvfrapsgifh261h263
h263ih264huffyuvidcinvideoindeo2
indeo3interplayvideojpeglskmvcloco
mdecmjpegmjpegbmmvideompeg1video
mpeg2videompeg4mpegvideomsmpeg4msmpeg4v1
msmpeg4v2msrlemsvideo1mszhnuv
pampbmpgmpgmyuvpng
ppmptxqdrawqpegqtrle
rawvideoroqvideorpzarv10rv20
sgismackvidsmcsnowsp5x
svq1svq3targatheorathp
tiertexseqvideotifftruemotion1truemotion2txd
ultimotionvbvc1vcr1vmdvideo
vp3vp5vp6vp6avp6f
vqavideowmv1wmv2wmv3wnv1
xan_wc3xlzlibzmbv 

Codec video

asv1asv2bmpdnxhddvvideo
ffv1ffvhuffflashsvflvgif
h261h263h263phuffyuvjpegls
libtheoralibx264libxvidljpegmjpeg
mpeg1videompeg2videompeg4msmpeg4msmpeg4v1
msmpeg4v2pampbmpgmpgmyuv
pngppmqtrlerawvideoroqvideo
rv10rv20sgisnowsvq1
targatiffwmv1wmv2zlib
zmbv    

Esempi

Il seguente codice prende un generico AVI come fonte e genera un filmato FLV a la youtube, con audio in MP3:

File source = new File("source.avi");
File target = new File("target.flv");
AudioAttributes audio = new AudioAttributes();
audio.setCodec("libmp3lame");
audio.setBitRate(new Integer(64000));
audio.setChannels(new Integer(1));
audio.setSamplingRate(new Integer(22050));
VideoAttributes video = new VideoAttributes();
video.setCodec("flv");
video.setBitRate(new Integer(160000));
video.setFrameRate(new Integer(15));
video.setSize(new VideoSize(400, 300));
EncodingAttributes attrs = new EncodingAttributes();
attrs.setFormat("flv");
attrs.setAudioAttributes(audio);
attrs.setVideoAttributes(video);
Encoder encoder = new Encoder();
encoder.encode(source, target, attrs);

Il prossimo esempio estrae l'audio da un filmato di origine e lo salva come file WAV:

File source = new File("source.avi");
File target = new File("target.wav");
AudioAttributes audio = new AudioAttributes();
audio.setCodec("pcm_s16le");
EncodingAttributes attrs = new EncodingAttributes();
attrs.setFormat("wav");
attrs.setAudioAttributes(audio);
Encoder encoder = new Encoder();
encoder.encode(source, target, attrs);

Il prossimo esempio prende un file WAV e genera un MP3 128 kbit/s, stereo, 44100 Hz:

File source = new File("source.wav");
File target = new File("target.mp3");
AudioAttributes audio = new AudioAttributes();
audio.setCodec("libmp3lame");
audio.setBitRate(new Integer(128000));
audio.setChannels(new Integer(2));
audio.setSamplingRate(new Integer(44100));
EncodingAttributes attrs = new EncodingAttributes();
attrs.setFormat("mp3");
attrs.setAudioAttributes(audio);
Encoder encoder = new Encoder();
encoder.encode(source, target, attrs);

Il prossimo esempio prende in ingresso un file AVI e ne genera un altro dove il flusso video è esattamente lo stesso della sorgente, mentre l'audio viene compresso in MP3 di bassa qualità:

File source = new File("source.avi");
File target = new File("target.avi");
AudioAttributes audio = new AudioAttributes();
audio.setCodec("libmp3lame");
audio.setBitRate(new Integer(56000));
audio.setChannels(new Integer(1));
audio.setSamplingRate(new Integer(22050));
VideoAttributes video = new VideoAttributes();
video.setCodec(VideoAttributes.DIRECT_STREAM_COPY);
EncodingAttributes attrs = new EncodingAttributes();
attrs.setFormat("avi");
attrs.setAudioAttributes(audio);
attrs.setVideoAttributes(video);
Encoder encoder = new Encoder();
encoder.encode(source, target, attrs);

Genera un AVI con video MPEG 4/DivX e audio OGG Vorbis:

File source = new File("source.avi");
File target = new File("target.avi");
AudioAttributes audio = new AudioAttributes();
audio.setCodec("libvorbis");
VideoAttributes video = new VideoAttributes();
video.setCodec("mpeg4");
video.setTag("DIVX");
video.setBitRate(new Integer(160000));
video.setFrameRate(new Integer(30));
EncodingAttributes attrs = new EncodingAttributes();
attrs.setFormat("mpegvideo");
attrs.setAudioAttributes(audio);
attrs.setVideoAttributes(video);
Encoder encoder = new Encoder();
encoder.encode(source, target, attrs);

Un video per cellulari:

File source = new File("source.avi");
File target = new File("target.3gp");
AudioAttributes audio = new AudioAttributes();
audio.setCodec("libfaac");
audio.setBitRate(new Integer(128000));
audio.setSamplingRate(new Integer(44100));
audio.setChannels(new Integer(2));
VideoAttributes video = new VideoAttributes();
video.setCodec("mpeg4");
video.setBitRate(new Integer(160000));
video.setFrameRate(new Integer(15));
video.setSize(new VideoSize(176, 144));
EncodingAttributes attrs = new EncodingAttributes();
attrs.setFormat("3gp");
attrs.setAudioAttributes(audio);
attrs.setVideoAttributes(video);
Encoder encoder = new Encoder();
encoder.encode(source, target, attrs);
© Sauron Software 2007 - 2012 | This page in English