void createMediaTypeBtns(string aSymbolicLink, XmlNode aSourceNode) { var lMediaTypeNodes = aSourceNode.SelectNodes("PresentationDescriptor/StreamDescriptor/MediaTypes/MediaType"); if (lMediaTypeNodes == null) { return; } mMediaTypeDataList.Clear(); foreach (var item in lMediaTypeNodes) { XmlNode lMediaTypeNode = item as XmlNode; if (lMediaTypeNode != null) { var lWidthAttr = lMediaTypeNode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_FRAME_SIZE']/Value.ValueParts/ValuePart[1]/@Value"); var lHeightAttr = lMediaTypeNode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_FRAME_SIZE']/Value.ValueParts/ValuePart[2]/@Value"); var lMediaTypeData = new MediaTypeData(); lMediaTypeData.mWidth = lWidthAttr.Value; lMediaTypeData.mHeight = lHeightAttr.Value; lMediaTypeData.mSymbolicLink = aSymbolicLink; mMediaTypeDataList.Add(lMediaTypeData); } } }
void selectAudioStream() { if (audioSourceDropdown == null) { return; } if (audioStreamDropdown == null) { return; } if (audioSourceDropdown.value > 0 && audioSourceDropdown.value <= mAudioSourceDataList.Count) { audioStreamDropdown.value = 0; audioStreamDropdown.ClearOptions(); audioStreamDropdown.onValueChanged.RemoveAllListeners(); var l_streamNodes = mAudioSourceDataList[audioSourceDropdown.value - 1].mSourceNode.SelectNodes("PresentationDescriptor/StreamDescriptor"); if (l_streamNodes == null) { return; } mAudioStreamDataList.Clear(); List <string> l_StreamFriendlyNames = new List <string>(); l_StreamFriendlyNames.Add(""); foreach (var item in l_streamNodes) { XmlNode lStreamNode = item as XmlNode; if (lStreamNode != null) { l_StreamFriendlyNames.Add("Audio Stream"); StreamData l_StreamData = new StreamData(); var l_media_type_nodes = lStreamNode.SelectNodes("MediaTypes/MediaType"); l_StreamData.mMediaTypes = new List <MediaTypeData>(); foreach (var mediatypenode in l_media_type_nodes) { XmlNode l_mediatypenode = mediatypenode as XmlNode; MediaTypeData l_MediaTypeData = new MediaTypeData(); l_MediaTypeData.mFriendlyData = l_mediatypenode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_AUDIO_BITS_PER_SAMPLE']/SingleValue/@Value").Value; l_MediaTypeData.mFriendlyData += " x " + l_mediatypenode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_AUDIO_NUM_CHANNELS']/SingleValue/@Value").Value; l_MediaTypeData.mFriendlyData += ", " + l_mediatypenode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_AUDIO_SAMPLES_PER_SECOND']/SingleValue/@Value").Value; l_MediaTypeData.mFriendlyData += ", " + l_mediatypenode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_SUBTYPE']/SingleValue/@Value").Value.Replace("MFAudioFormat_", ""); l_StreamData.mMediaTypes.Add(l_MediaTypeData); } mAudioStreamDataList.Add(l_StreamData); } } audioStreamDropdown.AddOptions(l_StreamFriendlyNames); audioStreamDropdown.gameObject.SetActive(true); audioStreamDropdown.onValueChanged.AddListener(delegate { audioMediaTypeDropdown.value = 0; selectAudioMediaType(); }); } else { audioStreamDropdown.value = 0; audioStreamDropdown.ClearOptions(); audioStreamDropdown.gameObject.SetActive(false); } }
List <StreamData> getEncoderMediaTypes(string aSymbolicLink, int aStreamIndex, int aMediaTypeIndex, string aEncoderIID, bool aIsVideo) { var l_SymbolicLink_BSTR = Marshal.StringToBSTR(aSymbolicLink); var l_EncoderIID_BSTR = Marshal.StringToBSTR(aEncoderIID); var lBSTR = getEncoderMediaTypes(l_SymbolicLink_BSTR, aStreamIndex, aMediaTypeIndex, l_EncoderIID_BSTR); Marshal.FreeBSTR(l_EncoderIID_BSTR); Marshal.FreeBSTR(l_SymbolicLink_BSTR); string lxmldoc = Marshal.PtrToStringBSTR(lBSTR); Marshal.FreeBSTR(lBSTR); Debug.Log(lxmldoc); XmlDocument doc = new XmlDocument(); doc.LoadXml(lxmldoc); var lGroupNodes = doc.SelectNodes("EncoderMediaTypes/Group"); List <StreamData> l_groups = new List <StreamData>(); l_groups.Add(new StreamData() { mFriendlyName = "", mMediaTypes = new List <MediaTypeData>() { new MediaTypeData() { mFriendlyData = "" } } }); if (lGroupNodes == null) { return(l_groups); } foreach (var item in lGroupNodes) { XmlNode lGroupNode = item as XmlNode; if (lGroupNode != null) { StreamData l_StreamData = new StreamData(); l_StreamData.mFriendlyName = lGroupNode.Attributes["Title"].Value; l_StreamData.mGUID = lGroupNode.Attributes["GUID"].Value; l_StreamData.mMediaTypes = new List <MediaTypeData>(); l_StreamData.mMediaTypes.Add(new MediaTypeData() { mFriendlyData = "" }); var l_MediaTypeNodes = lGroupNode.SelectNodes("MediaTypes/MediaType"); foreach (var itemnode in l_MediaTypeNodes) { XmlNode l_MediaTypeNode = itemnode as XmlNode; if (l_MediaTypeNode != null) { MediaTypeData l_MediaTypeData = new MediaTypeData(); if (aIsVideo) { l_MediaTypeData.mFriendlyData = l_MediaTypeNode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_FRAME_SIZE']/Value.ValueParts/ValuePart[1]/@Value").Value; l_MediaTypeData.mFriendlyData += " x " + l_MediaTypeNode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_FRAME_SIZE']/Value.ValueParts/ValuePart[2]/@Value").Value; l_MediaTypeData.mFriendlyData += ", " + l_MediaTypeNode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_FRAME_RATE']/RatioValue/@Value").Value; l_MediaTypeData.mFriendlyData += ", " + l_MediaTypeNode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_SUBTYPE']/SingleValue/@Value").Value.Replace("MFVideoFormat_", ""); var ltempNode = l_MediaTypeNode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_MPEG2_PROFILE']/SingleValue/@Value"); if (ltempNode != null) { switch (ltempNode.Value) { case "66": l_MediaTypeData.mFriendlyData += ", " + "Baseline Profile"; break; case "77": l_MediaTypeData.mFriendlyData += ", " + "Main Profile"; break; case "100": l_MediaTypeData.mFriendlyData += ", " + "High Profile"; break; default: break; } } } else { var ltempNode = l_MediaTypeNode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_AUDIO_BITS_PER_SAMPLE']/SingleValue/@Value"); if (ltempNode != null) { l_MediaTypeData.mFriendlyData = ltempNode.Value; } l_MediaTypeData.mFriendlyData += " x " + l_MediaTypeNode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_AUDIO_NUM_CHANNELS']/SingleValue/@Value").Value; l_MediaTypeData.mFriendlyData += ", " + l_MediaTypeNode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_AUDIO_SAMPLES_PER_SECOND']/SingleValue/@Value").Value; l_MediaTypeData.mFriendlyData += ", " + l_MediaTypeNode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_SUBTYPE']/SingleValue/@Value").Value.Replace("MFAudioFormat_", ""); ltempNode = l_MediaTypeNode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_AUDIO_AVG_BYTES_PER_SECOND']/SingleValue/@Value"); if (ltempNode != null) { int l_value = 0; if (int.TryParse(ltempNode.Value, out l_value)) { l_MediaTypeData.mFriendlyData += ", " + (l_value * 8) / 1000 + " kbits"; } } } l_StreamData.mMediaTypes.Add(l_MediaTypeData); } } l_groups.Add(l_StreamData); } } return(l_groups); }
void selectVideoStream() { if (videoSourceDropdown == null) { return; } if (videoStreamDropdown == null) { return; } if (videoSourceDropdown.value > 0 && videoSourceDropdown.value <= mVideoSourceDataList.Count) { videoStreamDropdown.value = 0; videoStreamDropdown.ClearOptions(); videoStreamDropdown.onValueChanged.RemoveAllListeners(); var l_streamNodes = mVideoSourceDataList[videoSourceDropdown.value - 1].mSourceNode.SelectNodes("PresentationDescriptor/StreamDescriptor"); if (l_streamNodes == null) { return; } mVideoStreamDataList.Clear(); List <string> l_StreamFriendlyNames = new List <string>(); l_StreamFriendlyNames.Add(""); foreach (var item in l_streamNodes) { XmlNode lStreamNode = item as XmlNode; if (lStreamNode != null) { l_StreamFriendlyNames.Add("Video Stream"); StreamData l_StreamData = new StreamData(); var l_media_type_nodes = lStreamNode.SelectNodes("MediaTypes/MediaType"); l_StreamData.mMediaTypes = new List <MediaTypeData>(); foreach (var mediatypenode in l_media_type_nodes) { XmlNode l_mediatypenode = mediatypenode as XmlNode; MediaTypeData l_MediaTypeData = new MediaTypeData(); l_MediaTypeData.mFriendlyData = l_mediatypenode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_FRAME_SIZE']/Value.ValueParts/ValuePart[1]/@Value").Value; l_MediaTypeData.mFriendlyData += " x " + l_mediatypenode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_FRAME_SIZE']/Value.ValueParts/ValuePart[2]/@Value").Value; l_MediaTypeData.mFriendlyData += ", " + l_mediatypenode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_FRAME_RATE']/RatioValue/@Value").Value; l_MediaTypeData.mFriendlyData += ", " + l_mediatypenode.SelectSingleNode("MediaTypeItem[@Name='MF_MT_SUBTYPE']/SingleValue/@Value").Value.Replace("MFVideoFormat_", ""); l_StreamData.mMediaTypes.Add(l_MediaTypeData); } mVideoStreamDataList.Add(l_StreamData); } } videoStreamDropdown.AddOptions(l_StreamFriendlyNames); videoStreamDropdown.gameObject.SetActive(true); videoStreamDropdown.onValueChanged.AddListener(delegate { videoMediaTypeDropdown.value = 0; selectVideoMediaType(); }); } else { videoStreamDropdown.value = 0; videoStreamDropdown.ClearOptions(); videoStreamDropdown.gameObject.SetActive(false); } }