From: mh Date: Sun, 2 Dec 2001 18:56:54 +0000 (+0000) Subject: Added specific mp3 media handler. modified RealAudio handler to inherit from X-Git-Tag: prexmlproducerconfig~309 X-Git-Url: http://erislabs.net/gitweb/?p=mir.git;a=commitdiff_plain;h=5f4cb1941d49eb2085964e66fb9125d81a3ad29e Added specific mp3 media handler. modified RealAudio handler to inherit from Audio handler. modified populate_mediatyp.sql --- diff --git a/dbscripts/populate_mediatyp.sql b/dbscripts/populate_mediatyp.sql index 5a126fbd..fe5a71d5 100755 --- a/dbscripts/populate_mediatyp.sql +++ b/dbscripts/populate_mediatyp.sql @@ -14,7 +14,7 @@ UPDATE "pg_class" SET "reltriggers" = 0 WHERE "relname" = 'media_type'; INSERT INTO "media_type" ("id","name","mime_type","classname","tablename","dcname") VALUES (2,'unknown','application/octet-stream','Generic','UploadedMedia',NULL); INSERT INTO "media_type" ("id","name","mime_type","classname","tablename","dcname") VALUES (3,'jpg','image/gif','ImagesGif','Images',NULL); -INSERT INTO "media_type" ("id","name","mime_type","classname","tablename","dcname") VALUES (4,'mp3','audio/mp3','Audio','UploadedMedia',NULL); +INSERT INTO "media_type" ("id","name","mime_type","classname","tablename","dcname") VALUES (4,'mp3','audio/mp3','Mp3','UploadedMedia',NULL); INSERT INTO "media_type" ("id","name","mime_type","classname","tablename","dcname") VALUES (5,'jpg','image/jpeg','ImagesJpeg','Images',NULL); INSERT INTO "media_type" ("id","name","mime_type","classname","tablename","dcname") VALUES (6,'pdf','application/pdf','Generic','UploadedMedia',NULL); INSERT INTO "media_type" ("id","name","mime_type","classname","tablename","dcname") VALUES (7,'mpg','video/mpeg','Video','UploadedMedia',NULL); @@ -23,8 +23,8 @@ INSERT INTO "media_type" ("id","name","mime_type","classname","tablename","dcnam INSERT INTO "media_type" ("id","name","mime_type","classname","tablename","dcname") VALUES (10,'ra','audio/vnd.rn-realaudio','RealAudio','UploadedMedia',NULL); INSERT INTO "media_type" ("id","name","mime_type","classname","tablename","dcname") VALUES (11,'rm','video/vnd.rn-realvideo','RealVideo','UploadedMedia',NULL); INSERT INTO "media_type" ("id","name","mime_type","classname","tablename","dcname") VALUES (12,'ra','audio/x-pn-realaudio','RealAudio','UploadedMedia',NULL); -INSERT INTO "media_type" ("id","name","mime_type","classname","tablename","dcname") VALUES (13,'mp3','audio/x-mp3','Audio','UploadedMedia',NULL); -INSERT INTO "media_type" ("id","name","mime_type","classname","tablename","dcname") VALUES (14,'mp3','audio/x-mpeg','Audio','UploadedMedia',NULL); +INSERT INTO "media_type" ("id","name","mime_type","classname","tablename","dcname") VALUES (13,'mp3','audio/x-mp3','Mp3','UploadedMedia',NULL); +INSERT INTO "media_type" ("id","name","mime_type","classname","tablename","dcname") VALUES (14,'mp3','audio/x-mpeg','Mp3','UploadedMedia',NULL); -- Enable triggers diff --git a/source/mir/media/MediaHandlerGeneric.java b/source/mir/media/MediaHandlerGeneric.java index 52ff97bd..5cad4434 100755 --- a/source/mir/media/MediaHandlerGeneric.java +++ b/source/mir/media/MediaHandlerGeneric.java @@ -35,9 +35,9 @@ import mir.storage.*; public class MediaHandlerGeneric implements MirMedia { - private String imageHost = MirConfig.getProp("Producer.Image.Host"); - private static String imageRoot = MirConfig.getProp("Producer.ImageRoot"); - private Logfile theLog = Logfile.getInstance(MirConfig.getProp("Home")+"log/media.log"); + protected String imageHost = MirConfig.getProp("Producer.Image.Host"); + protected String imageRoot = MirConfig.getProp("Producer.ImageRoot"); + protected Logfile theLog = Logfile.getInstance(this.getClass().getName()); public boolean set (byte[] uploadedData, Entity ent, Entity mediaTypeEnt ) { String ext = mediaTypeEnt.getValue("name"); String dir = MirConfig.getProp("Producer.Media.Path"); @@ -125,7 +125,10 @@ public class MediaHandlerGeneric implements MirMedia public String getURL(Entity ent, Entity mediaTypeEnt) { - int size = Integer.parseInt(ent.getValue("size"), 10)/1024; + String stringSize = ent.getValue("size"); + if (stringSize == null) + return null; + int size = Integer.parseInt(stringSize, 10)/1024; String title = ent.getValue("title")+ " - "+mediaTypeEnt.getValue("name")+" "+ size+" KB"; diff --git a/source/mir/media/MediaHandlerImages.java b/source/mir/media/MediaHandlerImages.java index b85904a9..3a4365e7 100755 --- a/source/mir/media/MediaHandlerImages.java +++ b/source/mir/media/MediaHandlerImages.java @@ -34,7 +34,7 @@ public class MediaHandlerImages protected final String WEBDB_GIF="1"; protected String imageType="0"; - private Logfile theLog = Logfile.getInstance(MirConfig.getProp("Home")+"log/media.log"); + private Logfile theLog = Logfile.getInstance(this.getClass().getName()); public byte[] get(Entity ent, Entity mediaTypeEnt) { diff --git a/source/mir/media/MediaHandlerMp3.java b/source/mir/media/MediaHandlerMp3.java new file mode 100755 index 00000000..747ef37d --- /dev/null +++ b/source/mir/media/MediaHandlerMp3.java @@ -0,0 +1,116 @@ +/* + * put your module comment here + */ + + +package mir.media; + +import java.util.*; + +import mir.entity.*; +import mir.misc.*; +import mir.storage.*; + + +/** + * Please note: this media handler produces + * 3 media files, the raw .mp3, a .m3u which is + * contains the URL for the mp3 and a .pls which + * contains the URL to the mp3 in shoutcast playlist + * format. What's important is that the web server (of + * the media host) must recognize the .m3u and .pls file + * extensions and send the proper "audio/x-mpegurl" + * and "audio/x-scpls" mime-types respectively. + * If the web server is apache, it's easy, just + * add: + * + * audio/x-mpegurl m3u + * audio/x-scpl pls + * + * to the file pointed to by the "TypesConfig" + * command in your apache config file. Or add + * and equivalent AddType command to your httpd.conf. + * Of course this assumes that the mod_mime is loaded. + * + * If the web server is not apache, then your on your own. + * + * @see mir.media.MirMedia + * @author mh + * @version 01.12.2001 + */ + +public class MediaHandlerMp3 extends MediaHandlerAudio implements MirMedia +{ + + public boolean set (byte[] uploadedData, Entity ent, Entity mediaTypeEnt ) { + String ext = mediaTypeEnt.getValue("name"); + String dir = MirConfig.getProp("Producer.Media.Path"); + String mediaHost = MirConfig.getProp("Producer.Media.Host"); + String date = ent.getValue("date"); + String datePath = StringUtil.webdbDate2path(date); + String baseName = ent.getId(); + String mediaFname = baseName+"."+ext; + String mp3Pointer = mediaHost+datePath+mediaFname; + String mpegURLFile = baseName+".m3u"; + String playlistFile = baseName+".pls"; + Integer size = new Integer(uploadedData.length); + if(FileUtil.write(dir+"/"+datePath+"/"+mediaFname, uploadedData)) { + //if(FileUtil.write(dir+"/"+mediaFname, uploadedData)) { + //were done with the data, dereference. + uploadedData=null; + + try { + //write the "meta" files + //first the .m3u since it only contains one line + FileUtil.write(dir+"/"+datePath+"/"+mpegURLFile,mp3Pointer.getBytes()); + //now the .pls file + FileUtil.write(dir+"/"+datePath+"/"+playlistFile,mp3Pointer.getBytes()); + ent.setValueForProperty("is_produced", "1"); + ent.setValueForProperty("icon_is_produced", "1"); + ent.setValueForProperty("publish_path",datePath+"/"+mediaFname); + //ent.setValueForProperty("publish_path", mediaFname); + ent.setValueForProperty("publish_server", mediaHost); + ent.setValueForProperty("size", size.toString()); + ent.update(); + } catch (StorageObjectException e) { + theLog.printError("StorageObjectException: "+e.toString()); + return false; + } + } else { + theLog.printError("could not write FILE!"); + return false; + } + + return true; + } + + public String getURL(Entity ent, Entity mediaTypeEnt) + { + String stringSize = ent.getValue("size"); + if (stringSize == null) + return null; + int size = Integer.parseInt(stringSize, 10)/1024; + String rawTitle = ent.getValue("title")+ + " - "+mediaTypeEnt.getValue("name")+" "+ + size+" KB "+"download"; + String m3uTitle = ent.getValue("title")+ + " - "+mediaTypeEnt.getValue("name")+" "+ + "streaming URL"; + String plsTitle = ent.getValue("title")+ + " - "+mediaTypeEnt.getValue("name")+" "+ + "playlist URL"; + + String basePath=StringUtil.regexpReplace(ent.getValue("publish_path"), ".mp3$",""); + + String m3uURL = StringUtil.createURLLinks(ent.getValue("publish_server")+"/"+basePath+".m3u", m3uTitle, imageRoot, getBigIcon()); + String plsURL = StringUtil.createURLLinks(ent.getValue("publish_server")+"/"+basePath+".pls", plsTitle, imageRoot, getBigIcon()); + String rawURL = StringUtil.createURLLinks(ent.getValue("publish_server")+"/"+ent.getValue("publish_path"), rawTitle, imageRoot, getBigIcon()); + + return m3uURL+"\n

"+plsURL+"\n

"+rawURL; + + } + +} + + + diff --git a/source/mir/media/MediaHandlerRealAudio.java b/source/mir/media/MediaHandlerRealAudio.java index a7b4c521..5a1c7c1c 100755 --- a/source/mir/media/MediaHandlerRealAudio.java +++ b/source/mir/media/MediaHandlerRealAudio.java @@ -23,12 +23,9 @@ import mir.storage.*; */ -public class MediaHandlerRealAudio extends MediaHandlerGeneric implements MirMedia +public class MediaHandlerRealAudio extends MediaHandlerAudio implements MirMedia { - private String imageHost = MirConfig.getProp("Producer.Image.Host"); - private static String imageRoot = MirConfig.getProp("Producer.ImageRoot"); - private Logfile theLog = Logfile.getInstance(MirConfig.getProp("Home")+"log/media.log"); public boolean set (byte[] uploadedData, Entity ent, Entity mediaTypeEnt ) { String ext = mediaTypeEnt.getValue("name"); String dir = MirConfig.getProp("Producer.Media.Path"); @@ -36,11 +33,11 @@ public class MediaHandlerRealAudio extends MediaHandlerGeneric implements MirMed String mediaHost = MirConfig.getProp("Producer.Media.Host"); String rtspMediaHost = MirConfig.getProp("Producer.RealMedia.Host"); - String mediaFname = ent.getId()+"."+ext; - String RealMediaPointer = rtspMediaHost+mediaFname; - String RealMediaFile = ent.getId()+".ram"; String date = ent.getValue("date"); String datePath = StringUtil.webdbDate2path(date); + String mediaFname = ent.getId()+"."+ext; + String realMediaPointer = rtspMediaHost+datePath+mediaFname; + String realMediaFile = ent.getId()+".ram"; Integer size = new Integer(uploadedData.length); if(FileUtil.write(dir+"/"+datePath+"/"+mediaFname, uploadedData)) { //if(FileUtil.write(rtspDir+"/"+mediaFname, uploadedData)) { @@ -48,13 +45,12 @@ public class MediaHandlerRealAudio extends MediaHandlerGeneric implements MirMed uploadedData=null; try { -//write an ram file -FileUtil.write(dir+"/"+RealMediaFile,RealMediaPointer.getBytes()); - + //write a ram file + FileUtil.write(dir+"/"+datePath+"/"+realMediaFile,realMediaPointer.getBytes()); ent.setValueForProperty("is_produced", "1"); ent.setValueForProperty("icon_is_produced", "1"); - ent.setValueForProperty("publish_path",datePath+"/"+mediaFname); - //ent.setValueForProperty("publish_path", RealMediaFile); + ent.setValueForProperty("publish_path",datePath+"/"+realMediaFile); + //ent.setValueForProperty("publish_path", realMediaFile); ent.setValueForProperty("publish_server", mediaHost); ent.setValueForProperty("size", size.toString()); ent.update(); @@ -70,51 +66,6 @@ FileUtil.write(dir+"/"+RealMediaFile,RealMediaPointer.getBytes()); return true; } - - - - - public String getPublishHost() - { - return MirConfig.getProp("Producer.Media.Host"); - } - - - - public String getURL(Entity ent, Entity mediaTypeEnt) - { - int size = Integer.parseInt(ent.getValue("size"), 10)/1024; - String title = ent.getValue("title")+ - " - "+mediaTypeEnt.getValue("name")+" "+ - size+" KB"; - return StringUtil.createURLLinks(ent.getValue("publish_server")+"/"+ - ent.getValue("publish_path"), title, imageRoot, getBigIcon()); - } - - - private static String tinyIcon = MirConfig.getProp("Producer.Icon.TinyAudio"); - private static String bigIcon = MirConfig.getProp("Producer.Icon.BigAudio"); - - public String getTinyIcon() - { - return tinyIcon; - } - - public String getBigIcon() - { - return bigIcon; - } - - public String getIconAlt() - { - return "Audio"; - } - - public boolean isAudio() - { - return true; - } - } diff --git a/source/mir/media/MediaHandlerRealVideo.java b/source/mir/media/MediaHandlerRealVideo.java index 264d1bd0..83d693cd 100755 --- a/source/mir/media/MediaHandlerRealVideo.java +++ b/source/mir/media/MediaHandlerRealVideo.java @@ -28,7 +28,7 @@ public class MediaHandlerRealVideo extends MediaHandlerGeneric implements MirMed private String imageHost = MirConfig.getProp("Producer.Image.Host"); private static String imageRoot = MirConfig.getProp("Producer.ImageRoot"); - private Logfile theLog = Logfile.getInstance(MirConfig.getProp("Home")+"log/media.log"); + private Logfile theLog = Logfile.getInstance(this.getClass().getName()); public boolean set (byte[] uploadedData, Entity ent, Entity mediaTypeEnt ) { String ext = mediaTypeEnt.getValue("name"); String dir = MirConfig.getProp("Producer.Media.Path");