public static MPDdata readXml(string XmlPath) { XmlDocument xmlDoc = new XmlDocument(); if (!System.IO.File.Exists(XmlPath)) { return(null); } xmlDoc.Load(XmlPath); //从Xml提取到data XmlNode nodeMPD = xmlDoc.SelectSingleNode("MPD"); XmlNode nodeTilePosition = nodeMPD.SelectSingleNode("tilePosition"); XmlNode nodeTileLumi = nodeMPD.SelectSingleNode("tileLumi"); XmlNode nodeTileDoF = nodeMPD.SelectSingleNode("tileDoF"); XmlNode nodeObjectTraj = nodeMPD.SelectSingleNode("objectTraj"); XmlNode nodeLookupTable = nodeMPD.SelectSingleNode("lookupTable"); MPDdata data = new MPDdata(); data.tilePosition = StringToUTF8ByteArray(((XmlCDataSection)nodeTilePosition).InnerText.Trim()); data.tileLumi = StringToUTF8ByteArray(((XmlCDataSection)nodeTileLumi).InnerText.Trim()); data.tileDoF = StringToUTF8ByteArray(((XmlCDataSection)nodeTileDoF).InnerText.Trim()); data.tileObjectTraj = StringToUTF8ByteArray(((XmlCDataSection)nodeObjectTraj).InnerText.Trim()); data.tileLookupTable = StringToUTF8ByteArray(((XmlCDataSection)nodeLookupTable).InnerText.Trim()); return(data); }
static void Main(string[] args) { //server WebServer.Main(); //clientMPDdata MPDdata data = MPDclient.requestMPDdata(1256); }
//根据文件名提取出客户端请求的MPD,存储到本地 public static bool genFile(string sPhysicalFilePath) { try { int fileNameStart = sPhysicalFilePath.LastIndexOf('/'); int videoID = int.Parse(sPhysicalFilePath.Substring(fileNameStart + 1, 4)); MPDdata data = MPDdata.getServerData(videoID); return(WriteXml(data, sPhysicalFilePath)); } catch { return(false); } }
public static bool WriteXml(MPDdata data, string sFilePath) { try { XmlTextWriter xml = new XmlTextWriter(sFilePath, Encoding.UTF8); xml.Formatting = Formatting.Indented; xml.WriteStartDocument(); xml.WriteStartElement("MPD"); xml.WriteStartElement("tilePosition"); //CData可以防止特殊字符影响提取xml xml.WriteCData(UTF8ByteArrayToString(data.tilePosition)); xml.WriteEndElement(); xml.WriteStartElement("tileLumi"); xml.WriteCData(UTF8ByteArrayToString(data.tileLumi)); xml.WriteEndElement(); xml.WriteStartElement("tileDoF"); xml.WriteCData(UTF8ByteArrayToString(data.tileDoF)); xml.WriteEndElement(); xml.WriteStartElement("objectTraj"); xml.WriteCData(UTF8ByteArrayToString(data.objectTraj)); xml.WriteEndElement(); xml.WriteStartElement("lookupTable"); xml.WriteCData(UTF8ByteArrayToString(data.lookupTable)); xml.WriteEndElement(); xml.WriteEndElement(); xml.WriteEndDocument(); xml.Flush(); xml.Close(); return(true); } catch (Exception e) { return(false); } }
//在服务器上,给定videoID和sec,根据PSPNR等数据生成一个MPDdata public static MPDdata getServerData(int videoID) { //TODO MPDdata newData = new MPDdata(30, 10); try { string vidMatPath = matPath + "/" + videoID.ToString("D4"); using (FileStream fs = new FileStream(vidMatPath + "/tilePosition.mat", FileMode.Open, FileAccess.Read)) { newData.tilePosition = new byte[fs.Length]; fs.Read(newData.tilePosition, 0, (int)fs.Length); } using (FileStream fs = new FileStream(vidMatPath + "/tileLumi.mat", FileMode.Open, FileAccess.Read)) { newData.tileLumi = new byte[fs.Length]; fs.Read(newData.tileLumi, 0, (int)fs.Length); } using (FileStream fs = new FileStream(vidMatPath + "/tileDoF.mat", FileMode.Open, FileAccess.Read)) { newData.tileDoF = new byte[fs.Length]; fs.Read(newData.tileDoF, 0, (int)fs.Length); } using (FileStream fs = new FileStream(vidMatPath + "/objectTraj.mat", FileMode.Open, FileAccess.Read)) { newData.objectTraj = new byte[fs.Length]; fs.Read(newData.objectTraj, 0, (int)fs.Length); } using (FileStream fs = new FileStream(vidMatPath + "/lookupTable.mat", FileMode.Open, FileAccess.Read)) { newData.lookupTable = new byte[fs.Length]; fs.Read(newData.lookupTable, 0, (int)fs.Length); } return(newData); }catch (Exception e) { Console.WriteLine(e); return(null); } }