Inheritance: CSharpRTMP.Core.MediaFormats.BaseMediaDocument
        public static bool ResolveCompleteMetadata(ref Variant metaData)
        {
            if (metaData[CONF_APPLICATION_EXTERNSEEKGENERATOR])
            {
                return(false);
            }
            BaseMediaDocument pDocument;

            if (false)
            {
            }
#if HAS_MEDIA_FLV
            else if ((string)metaData[META_MEDIA_TYPE] == MEDIA_TYPE_FLV ||
                     (string)metaData[META_MEDIA_TYPE] == MEDIA_TYPE_LIVE_OR_FLV)
            {
                pDocument = new FLVDocument(metaData);
            }
#endif
#if HAS_MEDIA_MP3
            else if ((string)metaData[META_MEDIA_TYPE] == MEDIA_TYPE_MP3)
            {
                pDocument = new MP3Document(metaData);
            }
#endif
#if HAS_MEDIA_MP4
            else if ((string)metaData[META_MEDIA_TYPE] == MEDIA_TYPE_MP4 ||
                     (string)metaData[META_MEDIA_TYPE] == MEDIA_TYPE_M4A ||
                     (string)metaData[META_MEDIA_TYPE] == MEDIA_TYPE_M4V ||
                     (string)metaData[META_MEDIA_TYPE] == MEDIA_TYPE_MOV ||
                     (string)metaData[META_MEDIA_TYPE] == MEDIA_TYPE_F4V)
            {
                pDocument = new MP4Document(metaData);
            }
#endif
#if HAS_MEDIA_NSV
            else if (metaData[Defines.META_MEDIA_TYPE] == Defines.MEDIA_TYPE_NSV)
            {
                pDocument = new NSVDocument(metaData);
            }
#endif
            else
            {
                Logger.FATAL("File type not supported yet. Partial metadata:\n{0}",
                             metaData.ToString());
                return(false);
            }
            //2. Process the document
            metaData.Log().Info("Processing file {0}", metaData[META_SERVER_FULL_PATH]);
            if (!pDocument.Process())
            {
                Logger.FATAL("Unable to process document");
                //pDocument.Dispose();
                if (metaData[CONF_APPLICATION_RENAMEBADFILES])
                {
                    File.Move((string)metaData[META_SERVER_FULL_PATH],
                              metaData[META_SERVER_FULL_PATH] + ".bad");
                }
                else
                {
                    Logger.WARN("File {0} will not be renamed",
                                metaData[META_SERVER_FULL_PATH]);
                }
                return(false);
            }
            //3. Get the medatada
            metaData = pDocument.MetaData;
            return(true);
        }