【问题标题】:Azure Media Services Error 400Azure 媒体服务错误 400
【发布时间】:2017-09-28 06:07:19
【问题描述】:

我目前正在构建一个应用程序,并正在尝试编写一个网络作业来 获取我已上传到 blob 存储的 mp4 文件并创建一个资产,然后我可以对其进行编码并准备使用 azure 媒体服务进行流式传输。

public class Functions
    {
        // This function will get triggered/executed when a new message is written 
        // on an Azure Queue called queue.
        static string accName = "copied from portal ";
        static string accKey = "as above";
        static CloudMediaContext context = new CloudMediaContext(accName,accName);
        // Use the cached credentials to create CloudMediaContext.
        //static CloudMediaContext context = new CloudMediaContext(accName,accKey);
        public static void ProcessVideo(
        [QueueTrigger("videorequest")] VideoBlobInformation blobInfo,
        [Blob("{ProfileId}/{BlobName}", FileAccess.Read)] Stream input,
        [Blob("{ProfileId}/{BlobNameWithoutExtension}_stream.mp4")] CloudBlockBlob outputBlob)
        {
            VideoBlobInformation b = blobInfo;
            using (Stream output = outputBlob.OpenWrite())
            {
                ConvertAndPrepareVideo(b,input, output);
            }
            // Entity Framework context class is not thread-safe, so it must
            // be instantiated and disposed within the function.
            using (impulsevidContext db = new impulsevidContext())
            {
                //var id = blobInfo.ProfileId;
                //Video ad = db.Videos.Find(id);
                //if (ad == null)
                //{
                  //  throw new Exception(String.Format("AdId {0} not found, can't create thumbnail", id.ToString()));
                //}
                //ad.StreamUrl = outputBlob.Uri.ToString();
                //db.SaveChanges();
            }
            
        }
        public static void ConvertAndPrepareVideo(VideoBlobInformation info,Stream input, Stream output)
        {
            var storageAccount = new CloudStorageAccount(new StorageCredentials("accnameofstorage", "storage account associated with azure media services"), true);
            //output all webjob input blobs into a container -mediacontroller- 
            var cloudBlobClient = storageAccount.CreateCloudBlobClient();
            var mediaBlobContainer = cloudBlobClient.GetContainerReference("impfile");
            mediaBlobContainer.CreateIfNotExists();
            IAsset sourceAsset = context.Assets.Where(a => a.Id == info.VideoId).First();
        }
我正在使用上传到的单个存储帐户。 无论我尝试由这条线引起什么,我都会收到此错误 400

IAsset sourceAsset = context.Assets.Where(a => a.Id == info.VideoId).First();

导致此日志错误的原因

Microsoft.Azure.WebJobs.Host.FunctionInvocationException:执行函数时出现异常:Functions.ProcessVideo ---> System.Net.WebException:远程服务器返回错误:(400)错误请求。 在 System.Net.WebClient.UploadValues(Uri 地址,String 方法,NameValueCollection 数据) 在 System.Net.WebClient.UploadValues(字符串地址,字符串方法,NameValueCollection 数据) 在 Microsoft.WindowsAzure.MediaServices.Client.AcsTokenProvider.c__DisplayClass47_2.b__0() 在 Microsoft.Practices.TransientFaultHandling.RetryPolicy.c__DisplayClass1.b__0() 在 Microsoft.Practices.TransientFaultHandling.RetryPolicy.ExecuteAction[TResult](Func1 func) at Microsoft.Practices.TransientFaultHandling.RetryPolicy.ExecuteAction(Action action) at Microsoft.WindowsAzure.MediaServices.Client.AcsTokenProvider.RefreshToken() at Microsoft.WindowsAzure.MediaServices.Client.AcsTokenProvider.GetAccessToken() at Microsoft.WindowsAzure.MediaServices.Client.AcsTokenProvider.GetAuthorizationHeader() at Microsoft.WindowsAzure.MediaServices.Client.OAuth.OAuthDataServiceAdapter.AddAccessTokenToRequest(WebRequest request) at Microsoft.WindowsAzure.MediaServices.Client.AzureMediaServicesClassFactory.<>c__DisplayClass21_0.<GetAccountApiEndpoint>b__0() at Microsoft.Practices.TransientFaultHandling.RetryPolicy.<>c__DisplayClass1.<ExecuteAction>b__0() at Microsoft.WindowsAzure.MediaServices.Client.TransientFaultHandling.MediaRetryPolicy.ExecuteAction[TResult](Func1 func) 在 Microsoft.Practices.TransientFaultHandling.RetryPolicy.ExecuteAction(动作动作) 在 Microsoft.WindowsAzure.MediaServices.Client.AzureMediaServicesClassFactory.GetAccountApiEndpoint(OAuthDataServiceAdapter dataServiceAdapter,ServiceVersionAdapter versionAdapter,Uri apiServer,UserAgentAdapter userAgentAdapter,IWebRequestAdapter clientRequestIdAdapter) 在 Microsoft.WindowsAzure.MediaServices.Client.AzureMediaServicesClassFactory.c__DisplayClass24_0.b__0() 在 Microsoft.WindowsAzure.MediaServices.Client.Cache1.GetOrAdd(String key, Func1 valueFactory,Func1 expirationFactory) at Microsoft.WindowsAzure.MediaServices.Client.AzureMediaServicesClassFactory.CreateAzureMediaServicesEndPoint(Uri azureMediaServicesEndpoint, MediaContextBase mediaContext) at Microsoft.WindowsAzure.MediaServices.Client.AzureMediaServicesClassFactory..ctor(Uri azureMediaServicesEndpoint, CloudMediaContext mediaContext) at Microsoft.WindowsAzure.MediaServices.Client.CloudMediaContext.get_MediaServicesClassFactory() at Microsoft.WindowsAzure.MediaServices.Client.AssetCollection.<.ctor>b__2_0() at System.Lazy1.CreateValue() 在 System.Lazy1.LazyInitValue() at System.Lazy1.get_Value() 在 Microsoft.WindowsAzure.MediaServices.Client.AssetCollection.get_Queryable() 在 Microsoft.WindowsAzure.MediaServices.Client.BaseCollection1.get_Provider() at System.Linq.Queryable.Where[TSource](IQueryable1 源,Expression1 predicate) at VideoProcess.Functions.ConvertAndPrepareVideo(VideoBlobInformation info, Stream input, Stream output) at VideoProcess.Functions.ProcessVideo(VideoBlobInformation blobInfo, Stream input, CloudBlockBlob outputBlob) at lambda_method(Closure , Functions , Object[] ) at Microsoft.Azure.WebJobs.Host.Executors.VoidMethodInvoker1.InvokeAsync(TReflected 实例,对象 [] 参数) 在 Microsoft.Azure.WebJobs.Host.Executors.FunctionInvoker`1.d__8.MoveNext() --- 从之前抛出异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在 Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.d__22.MoveNext() --- 从之前抛出异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在 System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(任务任务) 在 Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.d__21.MoveNext() --- 从之前抛出异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在 Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.d__19.MoveNext() --- 从之前抛出异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在 System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(任务任务) 在 Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.d__13.MoveNext() --- 内部异常堆栈跟踪结束 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.d__13.MoveNext() --- 从之前抛出异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在 Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.d__10.MoveNext()

【问题讨论】:

  • 您的文件/容器名称是否太长?
  • 不,blob 文件是 8486c644-7ed7-4f63-bba2-a8dd60c10bb1.mp4,容器名称是长度为 f24d8371ef41e0b32ddc4da6f5aa84ef 的 id 字段
  • 你解决了吗?

标签: c# azure azure-media-services azure-webjobssdk


【解决方案1】:

context = new CloudMediaContext(new MediaServicesCredentials( 帐户名称, ackey)); 应该在 ConvertAndPrepareVideo 方法中设置,而不是在外面

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多