1 10 11 package org.mmbase.applications.media.filters; 12 13 import org.mmbase.applications.media.urlcomposers.URLComposer; 14 import org.mmbase.util.logging.*; 15 import org.mmbase.util.xml.DocumentReader; 16 import org.w3c.dom.Element ; 17 import java.util.*; 18 19 20 27 public class ClientBitrateFilter implements Filter { 28 private static Logger log = Logging.getLoggerInstance(ClientBitrateFilter.class); 29 private static final String CONFIG_TAG = MainFilter.FILTERCONFIG_TAG + ".bitrates"; 30 private static Map bitrateFilters = new HashMap(); 31 32 public void configure(DocumentReader reader, Element element) { 33 try { 34 for(Iterator bitrates = reader.getChildElements(reader.getElementByPath(element, CONFIG_TAG));bitrates.hasNext();) { 35 Element bitrate=(Element )bitrates.next(); 36 String name = reader.getElementAttributeValue(bitrate, "name"); 37 int min = Integer.parseInt(reader.getElementAttributeValue(bitrate, "min")); 38 int max = Integer.parseInt(reader.getElementAttributeValue(bitrate, "max")); 39 BitrateFilterInfo brfi = new BitrateFilterInfo(name, min, max); 40 log.debug("Adding BitrateFilterInfo "+brfi); 41 bitrateFilters.put(name, brfi); 42 } 43 } catch (Exception ex) { 44 log.error("Error in filter.xml:" + ex); 45 log.error(Logging.stackTrace(ex)); 46 } 47 } 48 49 public List filter(List urlcomposers) { 50 List filteredUrlcomposers = new ArrayList(); 51 52 for (Iterator urlcomposerlist = urlcomposers.iterator();urlcomposerlist.hasNext();) { 53 URLComposer urlcomposer = (URLComposer)urlcomposerlist.next(); 54 55 Object bitrate = urlcomposer.getInfo().get("bitrate"); 56 log.debug("Client specified bitrate = " + bitrate); 57 58 if(bitrate==null) { 59 log.debug("Client did not specify bitrate."); 60 return urlcomposers; 61 } 62 63 if(bitrate instanceof List) { 64 log.error("lits is not supported."); 65 66 } 67 68 if (bitrate instanceof String ) { 69 if(!bitrateFilters.containsKey(bitrate)) { 70 log.error("Specified bitrate keyword is invaled. biterate="+bitrate); 71 } 72 BitrateFilterInfo brfi = (BitrateFilterInfo)bitrateFilters.get(bitrate); 73 int br = urlcomposer.getSource().getIntValue("bitrate"); 74 if (brfi.validate(br)) { 75 log.debug("BitrateFilter "+brfi+" fits for urlcomposer with bitrate "+br); 76 filteredUrlcomposers.add(urlcomposer); 77 } 78 } 79 } 80 81 log.debug("filteredUrlcomposers = "+filteredUrlcomposers); 82 return filteredUrlcomposers; 83 } 84 85 90 private class BitrateFilterInfo { 91 private String name; 92 private int min, max; 93 94 private BitrateFilterInfo(String name, int min, int max) { 95 this.name = name; 96 this.min = min; 97 this.max = max; 98 } 99 100 private boolean validate(int bitrateMedia) { 101 return min<bitrateMedia && max>bitrateMedia; 102 } 103 104 public String toString() { 105 return "BitrateFilterInfo name="+name+" max="+max+" min="+min; 106 } 107 } 108 } 109 | Popular Tags |