首页 文章

Azure媒体服务错误400

提问于
浏览
0

我正在构建一个应用程序,我正在尝试编写一个webjob来获取一个mp4文件,我已经上传到blob存储并创建一个资产,然后我可以编码并准备使用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(String address,String method,NameValueCollection data)at Microsoft.WindowsAzure.MediaServices.Client.AcsTokenProvider . <> c__DisplayClass47_2 Microsoft.Practices.TransientFaultHandling.RetryPolicy.ExecuteAction [TResult](Func1 func)at Microsoft.Practices.TransientFaultHandling.RetryPolicy.ExecuteAction(Action action)中的Microsoft.Practices.TransientFaultHandling.RetryPolicy . <> c__DisplayClass1.b__0() )Microsoft.WindowsAzure.MediaServices.Client.AcsTokenProvider.RefreshToken()at Microsoft.WindowsAzure.MediaServices.Client.AcsTokenProvider.GetAccessToken()at Microsoft.WindowsAzure.MediaServices.Client.AcsTokenProvider.GetAuthorizationHeader()at Microsoft.WindowsAzure.MediaServices . Microsoft.WindowsAzure.MediaServices.Client.AzureMediaServicesClassFactory中的Client.OAuth.OAuthDataServiceAdapter.AddAccessTokenToRequest(WebRequest请求) . <> c__Displ ayClass21_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)at Microsoft .Practices.TransientFaultHandling.RetryPolicy.ExecuteAction(动作动作)在Microsoft.WindowsAzure.MediaServices.Client.AzureMediaServicesClassFactory.GetAccountApiEndpoint(OAuthDataServiceAdapter dataServiceAdapter,ServiceVersionAdapter versionAdapter,乌里API服务器,userAgentAdapter userAgentAdapter,IWebRequestAdapter clientRequestIdAdapter)在Microsoft.WindowsAzure.MediaServices.Client.AzureMediaServicesClassFactory . <> c__DisplayClass24_0.b__0()at Microsoft.WindowsAzure.MediaServices.Client.Cache1.GetOrAdd(String key,Func1 valueFactory,Func1 expirationFactory)at Microsoft.WindowsAzure.MediaServices.Client.AzureMediaServicesClassFactory.CreateAzureMediaServicesEndPoint(Uri azureMediaServicesEndpoint,Media ContextBase mediaContext)位于Microsoft.WindowsAzure.MediaServicesClassFactory上的Microsoft.WindowsAzure.MediaServices.Client.AzureMediaServicesClassFactory..ctor(Uri azureMediaServicesEndpoint,CloudMediaContext mediaContext),以及Microsoft.WindowsAzure.MediaServices.Client.AssetCollection . < . 的Microsoft.WindowsAzure.MediaServices.Client.CloudMediaContext.get_MediaServicesClassFactory() . ctor> b__2_0()位于Microsoft.WindowsAzure.MediaServices上的Microsoft.WindowsAzure.MediaServices.Client.AssetCollection.get_Queryable()的System.Lazy1.get_Value()处的System.Lazy1.LazyInitValue()处的System.Lazy1.CreateValue()处 . 在VideoProcess.Functions.ProcessVideo的VideoProcess.Functions.ConvertAndPrepareVideo(VideoBlobInformation info,Stream input,Stream output)的System.Linq.Queryable.Where [TSource](IQueryable1源,Expression1谓词)上的Client.BaseCollection1.get_Provider()VideoBlobInformation blobInfo ,流输入,CloudBlockBlob outputBlob)在Microsoft.Azure.WebJobs.Host.Executors.VoidMethodIn的lambda_method(Closure,Functions,Object []) Microsoft.Azure.WebJobs.Host.Executors.FunctionInvoker`1.d__8.MoveNext()中的voker1.InvokeAsync(TReflected instance,Object [] arguments)从抛出异常的上一个位置开始的堆栈跟踪结束--- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务),位于Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.d__22.MoveNext()的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) . 来自抛出异常的先前位置的堆栈跟踪---在System.Runtime.CompilerServices.Throw上的System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务),System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd上的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) (任务任务)在Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.d__21.MoveNext()---从抛出异常的上一个位置的堆栈跟踪结束---在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuc Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.d__19.MoveNext()中的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中的cess(任务任务)---来自先前位置的堆栈跟踪结束,其中异常是抛出---在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)at atSystem.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务),位于Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.d__13.MoveNext()的System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(任务任务) . 内部异常堆栈跟踪---在Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.d__13.MoveNext()中的System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()---来自先前位置的堆栈跟踪结束,其中异常是抛出---在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)处于System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务),位于Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.d__10.MoveNext()

1 回答

  • 0

    context = new CloudMediaContext(new MediaServicesCredentials(accName,accKey));应该在ConvertAndPrepareVideo方法中设置,而不是在外面

相关问题