示例#1
0
        public static List<AsfHeaderItem> GetHeaderObjects(string fileName)
        {
            List<AsfHeaderItem> asfHeaderItems = new List<AsfHeaderItem>();
            bool isFirstObject = true;

            AsfHeaderItem asfHeaderItem = null;
            AsfHeaderItem asfHeaderExtensionsItem = null;

            AsfHeaderItem.Configuration.Reset();

            try
            {
                using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read))
                {
                    while (true)
                    {
                        AsfObject someObject = new AsfObject(fs);

                        long objSize = (long)someObject.Size;
                        if (objSize == 0)
                            break;
                        Guid objGuid = someObject.Guid;

                        if (isFirstObject && objGuid != AsfGuid.ASF_Header_Object) // invalid file
                            return null;

                        if (objGuid == AsfGuid.ASF_Header_Object)
                        {
                            asfHeaderItem = new AsfFileHeaderItem(fs);
                            asfHeaderItems.Add(asfHeaderItem);
                            isFirstObject = false;
                        }
                        else if (objGuid == AsfGuid.ASF_Stream_Bitrate_Properties_Object)
                        {
                            AsfHeaderItem item = new AsfStreamBitratePropertiesItem(fs);
                            asfHeaderItem.Add(item);
                        }
                        else if (objGuid == AsfGuid.ASF_File_Properties_Object)
                        {
                            AsfFilePropertiesItem item = new AsfFilePropertiesItem(fs);
                            asfHeaderItem.Add(item);
                        }
                        else if (objGuid == AsfGuid.ASF_Header_Extension_Object)
                        {
                            asfHeaderExtensionsItem = new AsfHeaderExtensionItem(fs);
                            asfHeaderItem.Add(asfHeaderExtensionsItem);
                        }
                        else if (objGuid == AsfGuid.ASF_Language_List_Object)
                        {
                            AsfLanguageListObjectItem item = new AsfLanguageListObjectItem(fs);
                            asfHeaderExtensionsItem.Add(item);
                        }
                        else if (objGuid == AsfGuid.ASF_Stream_Properties_Object)
                        {
                            AsfStreamPropertiesObjectItem item = new AsfStreamPropertiesObjectItem(fs);
                            asfHeaderItem.Add(item);
                        }
                        else if (objGuid == AsfGuid.ASF_Extended_Stream_Properties_Object)
                        {
                            AsfExtendedStreamPropertiesItem item = new AsfExtendedStreamPropertiesItem(fs);
                            asfHeaderExtensionsItem.Add(item);

                        }
                        else if (objGuid == AsfGuid.ASF_Compatibility_Object)
                        {
                            AsfCompatibilityObjectItem item = new AsfCompatibilityObjectItem(fs);
                            asfHeaderExtensionsItem.Add(item);
                        }
                        else if (objGuid == AsfGuid.ASF_Metadata_Object)
                        {
                            AsfMetadataObjectItem item = new AsfMetadataObjectItem(fs);
                            asfHeaderExtensionsItem.Add(item);
                        }
                        else if (objGuid == AsfGuid.ASF_Padding_Object)
                        {
                            AsfPaddingObjectItem item = new AsfPaddingObjectItem(fs);
                            asfHeaderExtensionsItem.Add(item);
                        }
                        else if (objGuid == AsfGuid.ASF_Index_Parameters_Placeholder_Object)
                        {
                            AsfIndexParametersPlaceholderItem item = new AsfIndexParametersPlaceholderItem(fs);
                            asfHeaderExtensionsItem.Add(item);
                        }
                        else if (objGuid == AsfGuid.ASF_Extended_Content_Description_Object)
                        {
                            AsfExtendedContentDescriptionItem item = new AsfExtendedContentDescriptionItem(fs);
                            asfHeaderItem.Add(item);
                        }
                        else if (objGuid == AsfGuid.ASF_Codec_List_Object)
                        {
                            AsfCodecListObjectItem item = new AsfCodecListObjectItem(fs);
                            asfHeaderItem.Add(item);
                        }
                        else if (objGuid == AsfGuid.ASF_Data_Object)
                        {
                            AsfDataObjectItem item = new AsfDataObjectItem(fs);
                            asfHeaderItems.Add(item);
                        }
                        else if (objGuid == AsfGuid.ASF_Simple_Index_Object)
                        {
                            AsfSimpleIndexObjectItem item = new AsfSimpleIndexObjectItem(fs);
                            asfHeaderItems.Add(item);
                        }
                        else if (objGuid == AsfGuid.ASF_Bitrate_Mutual_Exclusion_Object)
                        {
                            AsfBitrateMutualExclusionObjectItem item = new AsfBitrateMutualExclusionObjectItem(fs);
                            asfHeaderItem.Add(item);
                        }
                        else if (objGuid == AsfGuid.ASF_Content_Description_Object)
                        {
                            AsfContentDescriptionObjectItem item = new AsfContentDescriptionObjectItem(fs);
                            asfHeaderItem.Add(item);
                        }
                        else if (objGuid == AsfGuid.ASF_Stream_Prioritization_Object)
                        {
                            AsfStreamPrioritizationObjectItem item = new AsfStreamPrioritizationObjectItem(fs);
                            asfHeaderItem.Add(item);
                        }
                        else if (objGuid == AsfGuid.ASF_Timecode_Index_Parameters_Object)
                        {
                            AsfTimecodeIndexParametersObjectItem item = new AsfTimecodeIndexParametersObjectItem(fs);
                            asfHeaderExtensionsItem.Add(item);
                        }
                        else if (objGuid == AsfGuid.ASF_Index_Parameters_Object)
                        {
                            AsfIndexParametersObjectItem item = new AsfIndexParametersObjectItem(fs);
                            asfHeaderExtensionsItem.Add(item);
                        }
                        else if (objGuid == AsfGuid.ASF_Index_Object)
                        {
                            AsfIndexObjectItem item = new AsfIndexObjectItem(fs);
                            asfHeaderItems.Add(item);
                        }
                        else if (objGuid == AsfGuid.ASF_Script_Command_Object)
                        {
                            AsfScriptCommandObjectItem item = new AsfScriptCommandObjectItem(fs);
                            asfHeaderItem.Add(item);
                        }
                        else //Unknown object
                        {
                            fs.Seek(fs.Position + objSize, SeekOrigin.Begin);
                        }

                    }
                    return asfHeaderItems;
                }
            }
            catch (IOException)
            {
                return null;
            }
        }