Dimu Multimedia Server (DMS): Formål: DMS skal tilby skalerbar lagring og konvertering av video, audio og bilder for et utvalg av applikasjoner. Audio og Video skal konverteres til visningsvennlige formater for web, slik at de kan avspilles på de vanligste nettlesere. Bilder skal skaleres til et utvalg størrelser av typen jpg, slik at det blir raskt å vise dem i nettlesere. DMS lagrer ikke metadata for objektene, det må den enkelte klientapplikasjon gjøre selv. Video: Video konverteres til mp4, webm og ogv, samt at det genereres en thumbnail for videoen. Audio: Video konverteres til mp3. Image: Bilder skaleres til et utvalg størrelser. Det en målsetning at vi holder oss til noen bestemte størrelser a'la flickr, slik at disse kan preskaleres for å øke ytelsen. Støttede mediatyper: Video video/mpeg: MPEG-1 video with multiplexed audio; Defined in RFC 2045 and RFC 2046 video/mp4: MP4 video; Defined in RFC 4337 video/ogg: Ogg Theora or other video (with audio); Defined in RFC 5334 video/webm: WebM Matroska-based open media format video/x-ms-wmv: Windows Media Video; Documented in Microsoft KB 288102 video/x-flv: Flash video (FLV files) Audio audio/mp4: MP4 audio audio/mpeg: MP3 or other MPEG audio; Defined in RFC 3003 audio/ogg: Ogg Vorbis, Speex, Flac and other audio; Defined in RFC 5334 audio/vorbis: Vorbis encoded audio; Defined in RFC 5215 Image.jpg image/jpeg.png image/png DMS-API: DMS tilbyr et API, som klientapplikasjoner skal benytte.
Konseptuelt så opererer DMS med begrepene site, email og multimedia for å organisere data. Site: Det øverste nivået er site, som representerer en klientapplikasjon til DMS. En site kan f.eks. være Digitalt Fortalt, Digitalt Museum, etc. En klientapplikasjon trenger en sitekey, som den bruker i kommunikasjonen mot DMS. Email: Email knytter multimedia objekter til en bruker innenfor en site og skal også brukes i deler av kommunikasjon mot DMS-API. Multimedia: Multimedia er et objekt i DMS, som kan være av typene Video, Audio, Image, etc. En multimedia.identifier er en unik ID innenfor DMS. All kommunikasjon til DMS-API fra klientapplikasjon, skal foregå over ssl. Opplasting av multimedia: Opplasting av video eller lydfil gjøres ved å bestille en opplastningsurl. Multimediafilen post'es til denne url (multipart/form-data), med form fields: * filename (et kurant filnavn for det som lastes opp, helst med en extension som indikerer mimetype) * mediatype (mimetype video/*, image/*, audio/*). Den tolker video/* som film, audio/* som lyd, etc * title (tittel på objektet) * identifier (fra json['multimediaid']) Ved upload leter server igjennom form fields og tar imot felt av typen stream. Returnerer status=200 etter upload, hvis alt går bra. Eksempler implementert i python: def order_upload_url(): r = requests.post(url="%s/service/orderuploadlinkraw" % MULTIMEDIA_HOST, 'email': 'owner@example.org') return js['url'] JSON fra DMS: "url": "http://<dms-server-url>/upload?aid=<singleuseid>",
"action": "uploadmedia", "multimediaid": "00HsS8", "user.email": "owner@example.org" Når en video/audio er lastet opp, så får den status som "ikke publisert" og den er ikke tilgjengelig for andre enn sitekey+email+multimediaid. Med disse opplysningene kan man bestille en engangs avspillingsurl. Hvis objektet har status "publisert" får man en åpen avspillingsurl. def order_playback_url(mmid):$ r = requests.post(url="%s/service/orderplaybacklinkraw" % MULTIMEDIA_HOST, return js['urls'] JSON fra DMS: "action": "playback", "multimediaid": "00HsHG", "user.email": "admin@mmadmin.kulturit.no", "urls": "webm": "<mm-server-url>/multimedia/00hshg.webm?mmid=00hshg&a=pdpnzv", "ogv": "<mm-server-url>/multimedia/00hshg.ogv?mmid=00hshg&a=pdpnzv", "mp4": "<mm-server-url>/multimedia/00hshg.mp4?mmid=00hshg&a=pdpnzv" Publisering/Avpublisering: Et objekt kan publiseres/avpubliseres med publishobject/unpublishobject: def publish(mmid): r = requests.post(url="%s/service/publishobject" % MULTIMEDIA_HOST, return json.loads(r.text)
def unpublish(mmid): r = requests.post(url="%s/service/unpublishobject" % MULTIMEDIA_HOST, return json.loads(r.text) Objektstatus: def status(mmid): r = requests.post(url="%s/service/objectstatus" % MULTIMEDIA_HOST, return r.text$ vil returnere en json som dette: "identifier": "00HsHF", "title": "en eller annen mp3", "status": "done", "mediatype": "Audio", "published": "true" mediatype kan være: - Audio - Video - Image status kan være - init: Akkurat registrert og under opplasting - convert: ligger i kø for å prosesseres - converting: prosesseres - done: ferdig prosessert og klar til bruk - failed: Noe er galt...
Bildeopplastning: Bilde put'es via http uten noen opplastninsurl, e.l. Identifier for bildet returneres. NB. bilder settes automatisk med status til "publisert"! I motsetning til video/audio. def put_image(): r = requests.put(url="%s/image/" % MULTIMEDIA_HOST, params='sitekey': MULTIMEDIA_SITE_KEY, 'mediatype': 'image/jpeg', data=open('/some/file/on/disk/my.jpg', 'rb')) return js['identifier'] Bilde vises via samme url for originalbildet: http://<dms-server-url>/image/01hxsi For skalert bilde: (tregt, da det skalerer on the fly, hvis det ikke er rukket å skaleres av DMS) http://mm01:9977/image/01hxsi?dimension=1024x1024 Disse størrelsene er pregenerert: '57x57-crop', '145x105', '167x167', '174x156-crop', '250x250', '400x400', '600x380', '600x600', '720x480', '800x800', '1200x1200' De kan leses ut: http://<dms-server-url>/image/01hxsi?dimension=57x57-crop http://<dms-server-url>/image/01hxsi?dimension=1200x1200