Code Snippet
- /// <summary>
- /// Builds a smil file based on .mp4 files found in a given directory
- /// Assumes files are named XXX_bitrate.mp4 (movie_300.mp4)
- /// </summary>
- public static XmlDocument BuildSmilFile(DirectoryInfo sourceDirectory)
- {
- List<FileInfo> files = new List<FileInfo>();
- files.AddRange(sourceDirectory.GetFiles("*.mp4"));
- //biggest file (highest bitrate) first.
- files.Sort(delegate(FileInfo p1, FileInfo p2)
- {
- return p2.Length.CompareTo(p1.Length);
- });
- XmlDocument result = new XmlDocument();
- //create element nodes
- XmlNode smilNode = result.CreateElement("smil");
- XmlNode headNode = result.CreateElement("head");
- XmlNode bodyNode = result.CreateElement("body");
- XmlNode switchNode = result.CreateElement("switch");
- //add video nodes for each file
- foreach (FileInfo mp4File in files)
- {
- XmlNode videoNode = result.CreateElement("video");
- //Create and add attributes
- XmlAttribute srcAttr = result.CreateAttribute("src");
- srcAttr.Value = mp4File.Name;
- XmlAttribute bitrateAttr = result.CreateAttribute("system-bitrate");
- bitrateAttr.Value = Path.GetFileNameWithoutExtension(mp4File.Name).Substring(mp4File.Name.LastIndexOf("_") + 1) + "000";
- videoNode.Attributes.Append(srcAttr);
- videoNode.Attributes.Append(bitrateAttr);
- //add video node to switch
- switchNode.AppendChild(videoNode);
- }
- //append nodes to parent elements
- bodyNode.AppendChild(switchNode);
- smilNode.AppendChild(headNode);
- smilNode.AppendChild(bodyNode);
- result.AppendChild(smilNode);
- return result;
- }
No comments:
Post a Comment