MokaByte 83 - Marzo 2004 
MMS e Java

di
Diego Marconato
Il Multimedia Messaging Service, o più brevemente MMS è l'ultimo sviluppo della messaggistica mobile. MMS consente agli utenti della telefonia mobile di incorporare audio, fotografie ed altri contenuti in un messaggio di testo tradizionale, trasformandolo in un Messaggio Multimediale fatto di immagini e suoni.

Introduzione
Attualmente il numero di terminali compatibili con MMS sono in rapida crescita, e dato il successo degli SMS, gli MMS potranno guidare i profitti della comunicazione mobile basata sulle reti 2.5G (GPRS) e 3G (UMTS) come gli SMS hanno fatto per le reti 2G (SMS).
Gli MMS sono personali, includono audio, immagini e video. Con gli MMS si apre un collegamento diretto tra chi fa pubblicità e l'utente finale creando cosi una fantastica opportunità per l'immediata reazione del consumatore, il contatto o addirittura l'acquisto. Per i fornitori di contenuti, MMS può essere il trampolino di lancio di nuovi servizi a valore aggiunto da proporre a tutto il mercato.

 

Evoluzione della Messaggistica Mobile
I servizi di messaggistica mobile sono lo Short Message Service (SMS), il Nokia Smart Messaging (NSM), l'Enhanced Messaging Service (EMS) ed il Multimedia Messaging Service (MMS).
Il primo servizio di messaggistica mobile è stato lo Short Message Service originariamente sviluppato con il GSM.

SMS
Il servizio Short Message Service permette di inviare o ricevere brevi messaggi di testo di 160 caratteri. Lo Short Message Service è stato introdotto nel 1995 senza troppa convinzione da parte delle compagnie ed è diventato una delle forme di comunicazione più utilizzata.

NSM
Lo standard Smart Messagging è stato creato dalla Nokia e consente di usare gli SMS per inviare suonerie e loghi. Tecnicamente immagini e suonerie sono inviate tramite SMS (uno o più) con apposita codifica a 8 bit.

EMS
Enhanced Messaging Service è stato rilasciato nell'ottobre 2001.
EMS prevede la possibilità di inviare, con la stessa semplicità dei messaggi SMS, oltre a del testo anche delle semplici animazioni, icone o melodie. Il risultato è un messaggio SMS arricchito, ad esempio, da una "emoticons", una piccola icona per esprimere il proprio stato emotivo.

MMS
Il Multimedia Messaging Service è un servizio per la comunicazione mobile. In più rispetto ai tradizionali messaggi di testo un Messaggio Multimediale può contenere diversi formati multimediali.
I formati attualmente supportati da un messaggio sono:

  • Immagini: JPEG, GIF87a, GIF89a, WBMP, PNG
  • Audio: AMR
  • Video: MP4
  • Pim: vCalendar 1.0 vCard 2.1


Figura 1
- L'emulatore per gli MMS, il Nokia 7600

 


Figura 2- L'emulatore per gli MMS, il Nokia 7600

La dimensione massima di un Messaggio Multimediale non è stata fissata dallo standard MMS. Questo è stato fatto per assicurare la futura interoperabilità, inoltre la dimensione massima può dipendere anche dalle preferenze di ogni singolo operatore che fornisce il servizio di consegna del messaggio. In questa prima fase i messaggi MMS saranno di dimensioni comprese tra i 30 KB e i 100 KB.

 

Standard
Il Multimedia Messaging Service è un servizio standardizzato dal Wap Forum e dal 3GPP.
Le specifiche 3GPP definiscono i protocolli di comunicazione e l'architettura della rete, mentre le specifiche del Wap Forum definiscono le funzioni generali ed il formato dati di un pacchetto MMS.

 

Invio di un Messaggio
L'invio di un Messaggio Multimediale è molto simile all'invio di un SMS.

Invio di un SMS
1 - Il mittente compone il proprio messaggio di testo, inserisce il destinatario ed invia il messaggio.
2 - Il messaggio viene ricevuto da un Short Message Service Center (SMSC).
3 - Il Short Message Service Center consegna il messaggio al destinatario.


Figura 3
- Architettura della rete

Lo Short Message Service Center è un server inserito nella rete telefonica, il quale ha il compito di accettare messaggi di testo, memorizzare i messaggi e consegnarli appena possibile. Il tempo massimo in cui i messaggi verranno tenuti in memoria, se lo Short Message Service non è in grado di consegnarli immediatamente, perché il terminale del destinatario è spento oppure perché non ha la copertura della rete telefonica, dipende dal gestore della rete.

Invio di un MMS
L'invio di un MMS, in effetti non è cosi semplice come l'invio di un SMS:

1- Il mittente compone il messaggio assemblando testi suoni ed immagini. Inserisce poi il destinatario (numero di tel., e-mail, indirizzo IPv4 o IPv6) ed invia il messaggio utilizzando una connessione wap verso un centro MMS (MMSC: Multimedia Messaging Service Center).
2 - Il messaggio viene ricevuto da un centro MMS.
3 - Il centro MMS invia un "messaggio push" al destinatario, un SMS. Non è il messaggio originario, ma una notifica la quale avverte il destinatario della presenza di un nuovo messaggio MMS.
4 - Quando il destinatario decide di prelevare il messaggio, il terminale effettua una connessione wap verso il centro MMS.
5 - Il messaggio MMS viene inviato al destinatario.
6 - Il centro MMS eventualmente informa il mittente della avvenuta consegna del messaggio al destinatario attraverso un SMS.


Figura 4
- Architettura della rete


Complessità del Servizio
Il Multimedia Messaging Service è formalmente specificato da un insieme di primitive (operazioni) disponibili ad un utente o ad altre entità per accedere ai servizi stessi.
Queste primitive dicono al servizio di eseguire delle azioni o di fare rapporto su una azione.
Ad esempio l'invio di un Messaggio Multimediale corrisponde a due primitive del servizio, M-Send.req e M-Send.conf. Ogni primitiva del servizio è un pacchetto MMS, ed il formato dati di un pacchetto è composto da un header ed eventualmente da un body.
Le primitive del servizio MMS sono otto, questa la descrizione:
1 - M-Send.req, il mittente invia un Messaggio Multimediale al centro MMS.
2 - M-Send.conf, il centro MMS comunica al mittente se il Messaggio Multimediale è stato accettato
3 - M-Notification.ind, il centro MMS invia una notifica al destinatario la quale avverte della presenza di un nuovo Messaggio Multimediale.
4 - M-NotifyResp.ind, il destinatario comunica al centro MMS se la notifica è stata accettata.
5 - WSP/HTPP Get.req, l'utente attraverso una connessione Wap chiede di prelevare il Messaggio Multimediale.
6 - M-retrieve.conf, il centro MMS invia il Messaggio Multimediale al destinatario.
7 - M-Acknowledge.ind, il destinatario comunica al centro MMS se il Messaggio Multimediale è stato accettato.
8 - M-Delivery.ind, il centro MMS invia, se è stato richiesto, il rapporto di consegna al mittente.

Questo il modello delle transazioni:


Figura 5
- Le primitive del servizio MMS

Il mittente appena considerato è un terminale mobile, ora è possibile considerare un'applicazione come mittente. L'applicazione può essere, ad esempio, un servizio Web per l'invio di MMS accessibile da Internet con un qualsiasi browser.
Le primitive del servizio che ci interessano sono M-Send.req e M-Send.conf, sono queste infatti le operazioni che realizzano il collegamento con il centro MMS, poi questo consegnerà il messaggio al destinatario utilizzando tecnologie e protocolli implementati dall'operatore telefonico..


Figura 6
- Invio di un MMS da un'applicazione

La primitiva M-Send.req è un pacchetto MMS composto da una parte di intestazione (header) e dal corpo del messaggio (un testo, un'immagine , un'audio clip e cosi via).
La parte di intestazione contiene informazioni di indirizzamento e di controllo. Gli headers in tutto sono 17, di cui alcuni sono obbligatori ed altri sono opzionali.


Figura 7
- Il pacchetto MMS della primitiva M-Send.req

Questi alcuni headers:
X-Mms-MMS-Version: obbligatorio, la versione del servizio, ora è la 1.0.
From: obbligatorio, il mittente.
To, Cc, Bcc: almeno un campo è obbligatorio, il destinatario del messaggio.
X-Mms-Transaction-ID: obbligatorio, identifica univocamente questa primitiva e la primitiva di risposta M-Send.conf.
X-Mms-Delivery-Time: opzionale, indica dopo quanto tempo il messaggio memorizzato nel centro MMS deve essere consegnato al destinatario.
X-Mms-Delivery-Report: opzionale, indica se il mittente desidera il rapporto di consegna da ogni destinatario.
Content-Type: obbligatorio, indica se c'è una presentazione multimediale, oppure no.

Il corpo del messaggio invece viene codificato in base allo standard del Wap Forum.

La primitiva M-Send.conf invece è composta solo da una parte di intestazione.
Questa primitiva viene generata dal centro MMS in risposta alla primitiva precedente e contiene informazioni sullo stato del messaggio.


Figura 8 - Il pacchetto MMS della primitiva M-Send.conf

Questi sono alcuni headers generati:
X-Mms-MMS-Version: obbligatorio, come prima la versione del servizio.
X-Mms-Transaction-ID: obbligatorio, lo stesso identificatore della primitiva M-Send.req.
X-Mms-Response-Status: obbligatorio, indica se il messaggio è stato accettato utilizzando un codice di stato.
Message-Id: opzionale, quando il centro MMS accetta il messaggio assegna a questo un identificatore univoco. Questo identificativo può essere utilizzato, qui dall'applicazione, per la gestione del rapporto di consegna.

 

Un po' di Java
La realizzazione di un'applicazione per l'invio di MMS richiede un contratto con un operatore di rete telefonica. E' comunque possibile testare un'applicazione utilizzando le librerie e gli strumenti della Nokia Corporate, disponibili gratuitamente.
L'ultimo ambiente di sviluppo è il Nokia Mobile Server Services SDK 1.2 rilasciato a luglio del 2003, questo comprende le librerie Java, gli emulatori e la documentazione.
Questo ambiente di sviluppo è però abbastanza complesso, inizialmente è cosi conveniente utilizzare gli strumenti e le librerie precedenti: le Java MMS Library [1], l'emulatore MMSC EAIF [2], e gli emulatori Nokia 5100, 6650, 7210, 7600 ed Epoc 32 per la serie 60 [3].
Le MMS Java Library espongono le funzionalità per creare, codificare, decodificare ed inviare un messaggio multimediale.

Questo frammento di codice corrisponde all'invio di un messaggio:

import com.nokia.mms.*;
...
...
public static void main(String[] args){
//un messaggio multimediale
MMMessagge mms= new MMMessage();
//imposta gli headers
mms.setMessageType(IMMConstants.MESSAGE_TYPE_M_SEND_REQ);
mms.setTransactionId("00000000001");
mms.setVersion(IMMConstants.MMS_VERSION_10);
mms.setFrom("127.0.0.1/TYPE=PLMN")
mms.addToAddress("3768948493/TYPE=PLMN")
mms.setDeliveryReport(false);
mms.setContentType(IMMConstants.CT_APPLICATION_MULTIPART_MIXED);
. . . . . . . . . . .
// imposta il body
MMContent parte1 = new MMContent();
byte[] buf1 = readFile(path + "testo.txt");
parte1.setContent(buf1, 0, buf1.length);
parte1.setContentId("<0>");
parte1.setType(IMMConstants.CT_TEXT_PLAIN);
mms.addContent(parte1);
. . . . . . . . . . .
MMContent parte2 = new MMContent();
byte[] buf2 = readFile(path + "risultato.jpg");
parte2.setContent(buf2, 0, buf2.length);
parte1.setContentId("<1>");
parte2.setType(IMMConstants.CT_IMAGE_JPEG);
mms.addContent(part2);
. . . . . . . . . . .
//codifica del messaggio
MMEncoder encoder=new MMEncoder();
encoder.setMessage(mms);
encoder.encodeMessage();
byte[] out = encoder.getMessage()
. . . . . . . . . . .
//l'invio del messaggio resituisce un'oggetto
//MMResponse che rappresenta
//la primitiva M-Send.conf
MMSender sender = new MMSender();
sender.setMMSCURL("http://www.MMSC.com");
MMResponse response = sender.send(out);
. . . . . . . . . . .
}

 

Conclusioni
Questo articolo ha introdotto i concetti di base del Multimedia Messagging Service, i contenuti supportati, le primitive del servizio, discusso alcuni particolari del formato dati di un pacchetto MMS, e presentato una rassegna di alcuni tool disponibili.
Le Nokia MMS Java Library [1] ora non sono più utilizzate, comunque sono molto più semplici dell'ultimo ambiente di sviluppo il Nokia Mobile Server Services SDK 1.2, ed è consigliabile partire da queste per chi si avvicina per la prima volta allo sviluppo di applicazioni MMS.
In questo articolo non si è discusso dei protocolli di comunicazione di invio di un messaggio, comunque per quanto riguarda l'invio di un messaggio da un'applicazione il 3GPP ha definito l'utilizzo del Simple Object Access Protocol (SOAP), implementato ancora in versione beta nell'ultimo ambiente di sviluppo della Nokia a cui ci si riferisce come MM7.
Qui sotto, i riferimenti [4], [5] e [6] sono le specifiche del Multimedia Messagging Service per quanto riguarda le funzioni generali e gli headers di un pacchetto MMS, mentre [7] e [8] sono il punto di partenza per l'utilizzo degli strumenti della Nokia Corporate.

 

Bibliografia e Riferimenti

[1] Nokia MMS Java Library Ver 1.1, 4-Marzo-2002, www.forum.nokia.com.

[2] Nokia MMSC EAIF Emulator Ver 1.1, 2002, www.forum.nokia.com.

[3] Nokia 5100 SDK, Nokia 6650 MMS Concept SDK, Nokia 7210 Mobile Handset Simulator (MMS/WAP), Nokia 7600 MMS Concept SDK, Serie 60 Content Authoring SDK, www.forum.nokia.com.

[4] "MMS Architecture Overview", Wap Forum www.wapforum.org.

[5] "MMS Client Transaction", Wap Forum www.wapforum.org.

[6] "MMS Encapsulation Protocol" Wap Forum www.wapforum.org.

[7] "Getting Started with Nokia MMS Tools" 12-Giugno-2003, www.forum.nokia.com.

[8] "Getting Started with MMS" 25-Giugno-2003, www.forum.nokia.com.

Diego Marconato, vive a Treviso ed ha conseguito la Laurea di primo livello in Ingegneria Informatica presso l'Università degli Studi di Padova a Dicembre del 2003. Sportivo appassionato, ssegue particolarmente il basket biancoverde, anche quello americano dei Boston Celtics, il calcio italiano e bianconero. Pratica il calcetto.
Appassionato di USA e la vita delle piccole città a stelle e strisce.

MokaByte® è un marchio registrato da MokaByte s.r.l. 
Java®, Jini® e tutti i nomi derivati sono marchi registrati da Sun Microsystems.
Tutti i diritti riservati. E' vietata la riproduzione anche parziale.
Per comunicazioni inviare una mail a info@mokabyte.it