2015-03-06 2 views
1

У меня есть API, написанный на C#, который предназначен для получения файла из интерфейса. На данный момент это массив байтов, и я хочу преобразовать его в файл .mp4, а затем отправить его в службу azure media с помощью blobstorage. Я не хочу хранить его локально, и я тоже не могу его прочитать с диска. Каков наилучший подход для этого?Загрузка .mp4 в Azure Media Service из web api C#

Я создаю мой CloudBlobClient так:

private CloudBlobClient CloudBlobClient() 
     { 
      var storageAccount =   CloudStorageAccount.Parse(ConfigurationManager.ConnectionStrings["StorageConnection"].ConnectionString); 
      var blobStorage = storageAccount.CreateCloudBlobClient(); 
      CloudBlobContainer container = blobStorage.GetContainerReference(Constants.VideoBlobContainer); 
      if (container.CreateIfNotExist()) 
      { 
       var permissions = container.GetPermissions(); 
       permissions.PublicAccess = BlobContainerPublicAccessType.Container; 
       container.SetPermissions(permissions); 
      } 
      return blobStorage; 
     } 

Тогда у меня есть этот метод, который я начал

private Uri UploadToStorage(CloudBlobClient blobStorage, byte[] video, VideoSize size) 
     { 
      var uniqueBlobName = GetVideoUriAsString(VideoId, Type, size); 
      CloudBlockBlob blob = blobStorage.GetBlockBlobReference(uniqueBlobName); 

Я не уверен, как proceede здесь. Я много искал в Интернете для подходов, но все, что я нахожу, это пример чтения консольных приложений с диска.

Есть ли у кого-нибудь знакомые с этим типом загрузки в медиасерверы?

ответ

1

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

public void uploadBytesToBlobWithMimeAndStorageCreds(string theFolder, string theFileName, byte[] videoBytes, string theMimeType) 
{ 
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.ConnectionStrings["StorageConnection"].ConnectionString); 

    CloudBlobClient client = storageAccount.CreateCloudBlobClient; 
    CloudBlobContainer container = client.GetContainerReference(theFolder); 

    CloudBlob blob = container.GetBlobReference(theFileName); 
    blob.UploadByteArray(theBytes); 
    blob.Properties.CacheControl = "max-age=3600, must-revalidate"; 
    blob.Properties.ContentType = theMimeType; // e.g. "video/mp4" 
    blob.SetProperties(); 

} 
+0

Это сработало отлично, спасибо adaam. Если я хочу создать миниатюру для этого видео, какой был бы лучший подход? Спасибо – martoo

+0

@martoo Я этого никогда не делал, но это выглядит относительно легко сделать - см. Http://stackoverflow.com/questions/15702031/get-thumbnail-image-of-video-file-in-c- sharp – adaam

+0

У меня есть другой вопрос для вас adaam, если у вас есть время. Если я хочу скопировать видео из хранилища blob в медиа-сервис, то какой будет лучший подход, это то, что у меня есть до сих пор: см. Редактировать – martoo

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