Silverlight адаптивное парение, кодирование на стороне сервера? - PullRequest
1 голос
/ 31 августа 2010

кто-нибудь использовал SDK microsoft expression encoder SDK для кодирования видео на стороне сервера, чтобы подготовить его для адаптивной потоковой передачи Silverlight?

Как вы к этому относитесь?

1 Ответ

0 голосов
/ 03 сентября 2010

Я сделал службу Windows для кодирования файлов фильмов для создания файлов Adaptive Streaming на лету после загрузки. Недостатком для меня было то, что я хотел хранить файлы адаптивного потока внутри базы данных. Единственный способ добиться этого - создать собственный файловый API-интерфейс WIN32 или какую-то систему WebDav, которая может возвращать файловые потоки. Вы не можете создать свое собственное расширение SmoothStreamHandler для получения вашего файлового потока другими способами (например, из базы данных или чего-либо еще).

Остерегайтесь того, что он съедает все процессоры, которые у вас есть в вашей системе, поэтому не запускайте его на своем веб-сервере, а используйте для этого отдельный сервер. Кроме того, сервер не должен иметь много памяти, поскольку у него нет 64-битной версии, поэтому он не может использовать больше как 3,2 ГБ. Лучше всего просто мощность процессора и несколько быстрых дисков.

Существуют также аппаратные решения, которые поддерживают адаптивную потоковую передачу Silverlight, например Elemental Server .

Сам SDK довольно прост в использовании:

Пример:

private void ProcessFile(string filename, string outputFolder)
{
    try
    {
        MediaItem mediaItem;

        AdvancedVC1VideoProfile videoProfile = new AdvancedVC1VideoProfile();
        videoProfile.SmoothStreaming = true;
        videoProfile.AdaptiveGop = false;
        videoProfile.Streams.RemoveAt(0);

        try
        {
            mediaItem = new MediaItem(filename);

            // Add streams
            videoProfile.Streams.Add(new ConstantBitrate(1450), new Size(848, 480));
            videoProfile.Streams.Add(new ConstantBitrate(1050), new Size(592, 336));
            videoProfile.Streams.Add(new ConstantBitrate(600), new Size(424, 240));

            mediaItem.OutputFormat.VideoProfile = videoProfile;
        }
        catch (InvalidMediaFileException ex)
        {
            Console.WriteLine(ex.Message);
            return;
        }

        using (Job job = new Job())
        {
            job.MediaItems.Add(mediaItem);
            job.OutputDirectory = outputFolder;
            job.CreateSubfolder = false;

            job.EncodeProgress += (object sender, EncodeProgressEventArgs e) =>
            {
                // Trace progress..
            };

            job.Encode();

        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
        return;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...