Добрый день всем, кто нашел в себе силы для того, чтобы заглянуть на Хабр в последнюю рабочую неделю этого года! На этот раз я хотел бы поделиться с вами опытом использования сервисов для работы с мультимедиа контентом, предоставляемого облачными провайдерами. Чтобы процесс был более интересным мы рассмотрим два облачных провайдера: Windows Azure Media Services и Amazon Elastic Transcoder. После этого конечно же не забудем их сравнить! Итак, поехали!
Входные данные
Пусть входными данными для нас будет являться видео файл снятый с помощью мобильного устройства в формате 720p (Android). Его длительность равна 24 секундам, а размер 13 Мб. Мы хотим его конвертировать в формат 480p.
Базовый интерфейс
Итак, будем создавать новый Solution в Visual Studio. Предположим, что клиент для работы с каждым облачным провайдером должен реализовывать какую-то базовую функциональность. Чтобы, к примеру, мы могли легко заменить использование Windows Azure Media Services на Amazon Elastic Transcoder. Поэтому объявим базовый интерфейс:
public interface IVideoConverter
{
void Convert(string sourceFile, string destinationFile);
void UploadFile(string localFile);
void DownloadFile(string localFile);
void WaitForConversionToComplete();
}
Каждый клиент, реализующий этот интерфейс, должен уметь:
- UploadFile – загружать файл с локального хранилища в облако;
- DownloadFile – скачивать перекодированный файл из облачного хранилища в локальное;
- Convert – собственно уметь перекодировать файл из одного формата в другой;
- WaitForConversionToComplete – ожидать результатов выполнения операции кодирования.
Общий принцип работы с клиентом будет выглядеть следующим образом:
IVideoConverter client = new КлассРеализующийIVideoConverter();
client.Convert(“путь_к_исходному_файлу”, “путь_к_результирующему_файлу”);
Соответственно метод Convert в псевдокоде будет выглядеть так:
public void Convert(string sourceFile, string destinationFile)
{
// Загрузить файл
UploadFile(sourceFile);
// Начать кодирование
ПерекодироватьВидео();
// Дождаться результатов
WaitForConversionToComplete();
// Скачать перекодированный файл
DownloadFile(destinationFile);
}
Читать полностью »