2014-12-23 5 views
0

Я загружаю видео в azure, создаю объект и кодирую видео. Когда кодировка закончена, я получаю четыре файла в папке с ресурсами (.ism, .mp4, .xml, .xml) и ссылки на каждый источник. Когда я пытаюсь воспроизвести файл .mp4 в видеоплеере, ничего не происходит. Однако, когда я загружаю файл .mp4, он отлично работает.Видео не воспроизводится после кодировки

<video id="video1" src="https://123media.blob.core.windows.net/asset-bf389cc4-8454-410a-9492-7acab59b2d25/Wildlife_H264_4500kbps_AAC_und_ch2_128kbps.mp4" autoplay="autoplay" height="400" width="600" /> 

 CloudStorageAccount storageAccount1 = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString")); 
     CloudBlobClient cloudBlobClient1 = storageAccount1.CreateCloudBlobClient(); 
     var context = new CloudMediaContext("123media", "###############################"); 
     var CreateAsset = context.Assets.Create(Path.GetFileNameWithoutExtension(fileName), AssetCreationOptions.None); 
     var assetFile = CreateAsset.AssetFiles.Create(fileName); 

     IAccessPolicy writePolicy = context.AccessPolicies.Create("Policy For Copying", TimeSpan.FromMinutes(30), AccessPermissions.Write | AccessPermissions.List); 
     ILocator assetLocator = context.Locators.CreateSasLocator(CreateAsset, writePolicy, DateTime.UtcNow.AddMinutes(-5)); 
     string assetContainerName = (new Uri(assetLocator.Path)).Segments[1]; 
     CloudBlobContainer assetContainer = cloudBlobClient1.GetContainerReference(assetContainerName); 
     CloudBlockBlob assetBlob = assetContainer.GetBlockBlobReference(blobName); 
     assetBlob.StartCopyFromBlob(blob); 

     var inputAsset = context.Assets.Where(a => a.Id == CreateAsset.Id).FirstOrDefault(); 
     if (inputAsset == null) 
      throw new ArgumentException("Could not find assetId: " + CreateAsset.Id); 
     var encodingPreset = "H264 Broadband 720p"; // <a href="http://msdn.microsoft.com/en-us/library/windowsazure/jj129582.aspx#H264Encoding">http://msdn.microsoft.com/en-us/library/windowsazure/jj129582.aspx#H264Encoding</a> 
     IJob job = context.Jobs.Create("Encoding " + inputAsset.Name + " to " + encodingPreset); 
     IMediaProcessor latestWameMediaProcessor = (from p in context.MediaProcessors where p.Name == "Windows Azure Media Encoder" select p).ToList().OrderBy(wame => new Version(wame.Version)).LastOrDefault(); 
     ITask encodeTask = job.Tasks.AddNew("Encoding", latestWameMediaProcessor, encodingPreset, TaskOptions.None); 
     encodeTask.InputAssets.Add(inputAsset); 
     encodeTask.OutputAssets.AddNew(inputAsset.Name + " as " + encodingPreset, AssetCreationOptions.None); 
     job.Submit(); 
     job.GetExecutionProgressTask(CancellationToken.None).Wait(); 

+0

-deleted-, добавлено как ответ –

ответ

0

Если актив общедоступными по этому URL - попробуйте добавить тип = 'видео/mp4' на видео метки.

Сторона примечания - также вам нужно «опубликовать» видео, чтобы оно было доступно потоку через общие «блоки кодирования». Ваш файл .ism указывает, что вы создали какой-то потоковый общий ресурс (Smooth one, я думаю).

Имейте в виду, что потоковая передача еще не полностью поддерживается во всех браузерах (MPEG DASH - это потоковый формат HTML5), а для других потоковых форматов (Smooth или Apple HLS) вам потребуется использовать реализации Silverlight \ Flash.

+0

Да, я попытался добавить видео/mp4 в тег видео. Это не имеет значения. Я также попытался воспроизвести видео в Media Content Content Player внутри Azure Portal и получил сообщение об ошибке «Мы не можем подключиться к требуемому контенту».Я не получаю сообщение об ошибке в любой части моего скрипта и, как я уже говорил в оригинальном посте, когда я загружаю файл MP4, он отлично работает. –

+0

Какую предустановленную кодировку вы использовали? Опубликован ли он? –

+0

Да, он опубликован. Я редактировал свой оригинальный вопрос, чтобы включить код кодирования. –

0

Есть несколько вещей с Azure Media Services.

Прежде всего, хотя Azure Media Services работает непосредственно с Azure Storage, я настоятельно рекомендую вам не работать напрямую с базовым хранилищем (хотя вы технически это можете). Причина в том, что вы очень быстро потеряете контроль над тем, что доступно для общественности, а что нет. Еще больше - вы можете разбить ссылки Assets - Blobs и вызвать несогласованность в Media Service.

Во-вторых, правильный способ воспроизведения результата MP4 в элементе видео состоит в предоставлении полного пути к протоколу MP4 с помощью Shared Access Signature Locator. Контейнеры и капли, используемые Media Services, помечены как частные, и доступ к ним не разрешен. Итак, вам нужен локатор. И когда вы хотите просто увидеть результат в элементе Video, вам нужен локатор подписи общего доступа, который указывает на MP4. Это будет прогрессивная загрузка видео, но она будет играть.

Последнее, но не менее, никогда не забывает (from docu):

Там может быть 30-40 секундной задержки после того, как локатор создается, когда он доступен для использования. Эта проблема относится как к URL-адресу SAS, так и к локаторам OnDemandOrigin .

Так что вам нужна логика для управления вашими локаторами. Насколько я помню, и если это так, существует ограничение количества локаторов (или политик доступа), которые вы можете создать для каждого актива.

1

Одна из причин, по которым вы не сможете воспроизвести видео, будет, вы не добавили поточную конечную точку на свою учетную запись медиа-служб. Назначьте хотя бы один блок, чтобы иметь возможность транслировать ваше видео онлайн. Это сделало трюк для меня. Найдите его здесь.

enter image description here

Кроме того, следить за блогом MingFei Yan. Очень полезно при запуске с Azure Media Services.

Смежные вопросы