| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 | using System;#if __MonoCS__using Mono.Unix.Native;using System.Text.RegularExpressions;using System.IO;#endifnamespace MediaBrowser.ServerApplication.FFMpeg{    public static class FFMpegDownloadInfo    {        // Windows builds: http://ffmpeg.zeranoe.com/builds/        // Linux builds: http://ffmpeg.gusari.org/static/        public static string Version = ffmpegOsType("Version");        public static string[] FfMpegUrls = GetDownloadUrls();        public static string FFMpegFilename = ffmpegOsType("FFMpegFilename");        public static string FFProbeFilename = ffmpegOsType("FFProbeFilename");        public static string ArchiveType = ffmpegOsType("ArchiveType");        private static string ffmpegOsType(string arg)        {            OperatingSystem os = Environment.OSVersion;            PlatformID pid = os.Platform;            switch (pid)            {                case PlatformID.Win32NT:                    switch (arg)                    {                        case "Version":                            return "20140105";                        case "FFMpegFilename":                            return "ffmpeg.exe";                        case "FFProbeFilename":                            return "ffprobe.exe";                        case "ArchiveType":                            return "7z";                    }                    break;                #if __MonoCS__                case PlatformID.Unix:                    if (PlatformDetection.IsMac)                    {                        if (PlatformDetection.IsX86_64)                        {                            switch (arg)                            {                                case "Version":                                    return "20131121";                                case "FFMpegFilename":                                    return "ffmpeg";                                case "FFProbeFilename":                                    return "ffprobe";                                case "ArchiveType":                                    return "gz";                            }                            break;                        }                    }                    if (PlatformDetection.IsLinux)                    {                        if (PlatformDetection.IsX86)                        {                            switch (arg)                            {                                case "Version":                                    return "linux_x86_20140118";                                case "FFMpegFilename":                                    return "ffmpeg";                                case "FFProbeFilename":                                    return "ffprobe";                                case "ArchiveType":                                    return "gz";                            }                            break;                        }                        else if (PlatformDetection.IsX86_64)                        {                            // Linux on x86 or x86_64                            switch (arg)                            {                                case "Version":                                    return "linux_x86_64_20140118";                                case "FFMpegFilename":                                    return "ffmpeg";                                case "FFProbeFilename":                                    return "ffprobe";                                case "ArchiveType":                                    return "gz";                            }                            break;                        }                    }                    // Unsupported Unix platform                    return "";                #endif            }            return "";        }        private static string[] GetDownloadUrls()        {            var pid = Environment.OSVersion.Platform;                        switch (pid)            {                case PlatformID.Win32NT:                    return new[]                    {                        "http://ffmpeg.zeranoe.com/builds/win32/static/ffmpeg-20140105-git-70937d9-win32-static.7z",                        "https://www.dropbox.com/s/oghurnp5zh292ry/ffmpeg-20140105-git-70937d9-win32-static.7z?dl=1"                    };                               #if __MonoCS__                case PlatformID.Unix:                     if (PlatformDetection.IsMac && PlatformDetection.IsX86_64)                    {                        return new[]                        {                            "https://www.dropbox.com/s/n188rxbulqem8ry/ffmpeg-osx-20131121.gz?dl=1"                        };                    }                    if (PlatformDetection.IsLinux)                    {                        if (PlatformDetection.IsX86)                        {                            return new[]                            {                                "http://ffmpeg.gusari.org/static/32bit/ffmpeg.static.32bit.2014-01-18.tar.gz",                                "https://www.dropbox.com/s/b7nkg71sil812hp/ffmpeg.static.32bit.2014-01-04.tar.gz?dl=1"                            };                        }                        if (PlatformDetection.IsX86_64)                        {                            return new[]                            {                                "http://ffmpeg.gusari.org/static/64bit/ffmpeg.static.64bit.2014-01-18.tar.gz"                            };                        }                    }                    //No Unix version available                     return new string[] {};#endif            }            return new string[] {};        }    }    #if __MonoCS__    public static class PlatformDetection    {        public readonly static bool IsWindows;        public readonly static bool IsMac;        public readonly static bool IsLinux;        public readonly static bool IsX86;        public readonly static bool IsX86_64;        public readonly static bool IsArm;        static PlatformDetection ()        {            IsWindows = Path.DirectorySeparatorChar == '\\';            //Don't call uname on windows            if (!IsWindows)            {                Utsname uname;                var callResult = Syscall.uname(out uname);                if (callResult == 0)                {                    IsMac = uname.sysname == "Darwin";                    IsLinux = !IsMac && uname.sysname == "Linux";                    Regex archX86 = new Regex("(i|I)[3-6]86");                    IsX86 = archX86.IsMatch(uname.machine);                    IsX86_64 = !IsX86 && uname.machine == "x86_64";                    IsArm = !IsX86 && !IsX86 && uname.machine.StartsWith("arm");                }            }            else            {                if (System.Environment.Is64BitOperatingSystem)                    IsX86_64 = true;                else                    IsX86 = true;            }        }    }    #endif}
 |