代码之家  ›  专栏  ›  技术社区  ›  AlexB

Azure媒体服务-使用v3编码4K UHD视频

  •  0
  • AlexB  · 技术社区  · 7 年前

    我用v3api(.netcore)制作了一个在Azure中编码视频的库。我成功地编到了FHD。 但后来我尝试编码4k超高清视频(基于 How to encode with a custom Transform H264 Multiple Bitrate 4K 文章)。 下面是我创建这个转换的代码:

            private static async Task<Transform> Ensure4kTransformExistsAsync(IAzureMediaServicesClient client,
            string resourceGroupName,
            string accountName)
        {
            H264Layer CreateH264Layer(int bitrate, int width, int height)
            {
                return new H264Layer(
                    profile: H264VideoProfile.Auto,
                    level: "auto",
                    bitrate: bitrate, // Note that the units is in bits per second
                    maxBitrate: bitrate,
                    //bufferWindow: TimeSpan.FromSeconds(5),    // this is the default
                    width: width.ToString(),
                    height: height.ToString(),
                    bFrames: 3,
                    referenceFrames: 3,
                    adaptiveBFrame: true,
                    frameRate: "0/1"
                );
            }
    
            // Does a Transform already exist with the desired name? Assume that an existing Transform with the desired name
            // also uses the same recipe or Preset for processing content.
            Transform transform = await client.Transforms.GetAsync(resourceGroupName, accountName, TRANSFORM_NAME_H264_MULTIPLE_4K_S);
    
            if (transform != null) return transform;
    
            // Create a new Transform Outputs array - this defines the set of outputs for the Transform
            TransformOutput[] outputs =
            {
                // Create a new TransformOutput with a custom Standard Encoder Preset
                new TransformOutput(
                    new StandardEncoderPreset(
                        codecs: new Codec[]
                        {
                            // Add an AAC Audio layer for the audio encoding
                            new AacAudio(
                                channels: 2,
                                samplingRate: 48000,
                                bitrate: 128000,
                                profile: AacAudioProfile.AacLc
                            ),
                            // Next, add a H264Video for the video encoding
                            new H264Video(
                                // Set the GOP interval to 2 seconds for both H264Layers
                                keyFrameInterval: TimeSpan.FromSeconds(2),
                                // Add H264Layers
                                layers: new[]
                                {
                                    CreateH264Layer(20000000, 4096, 2304),
                                    CreateH264Layer(18000000, 3840, 2160),
                                    CreateH264Layer(16000000, 3840, 2160),
                                    CreateH264Layer(14000000, 3840, 2160),
                                    CreateH264Layer(12000000, 2560, 1440),
                                    CreateH264Layer(10000000, 2560, 1440),
                                    CreateH264Layer(8000000, 2560, 1440),
                                    CreateH264Layer(6000000, 1920, 1080),
                                    CreateH264Layer(4700000, 1920, 1080),
                                    CreateH264Layer(3400000, 1280, 720),
                                    CreateH264Layer(2250000, 960, 540),
                                    CreateH264Layer(1000000, 640, 360)
                                }
                            ),
                            // Also generate a set of PNG thumbnails
                            new PngImage(
                                start: "25%",
                                step: "25%",
                                range: "80%",
                                layers: new[]
                                {
                                    new PngLayer(
                                        "50%",
                                        "50%"
                                    )
                                }
                            )
                        },
                        // Specify the format for the output files - one for video+audio, and another for the thumbnails
                        formats: new Format[]
                        {
                            // Mux the H.264 video and AAC audio into MP4 files, using basename, label, bitrate and extension macros
                            // Note that since you have multiple H264Layers defined above, you have to use a macro that produces unique names per H264Layer
                            // Either {Label} or {Bitrate} should suffice
    
                            new Mp4Format(
                                "Video-{Basename}-{Label}-{Bitrate}{Extension}"
                            ),
                            new PngFormat(
                                "Thumbnail-{Basename}-{Index}{Extension}"
                            )
                        }
                    ),
                    OnErrorType.StopProcessingJob,
                    Priority.Normal
                )
            };
    
            const string DESCRIPTION = "Multiple 4k";
            // Create the custom Transform with the outputs defined above
            transform = await client.Transforms.CreateOrUpdateAsync(resourceGroupName, accountName, TRANSFORM_NAME_H264_MULTIPLE_4K_S,
                outputs,
                DESCRIPTION);
    
            return transform;
        }
    

    但作业最终会出现以下错误:

    发生错误。阶段:ProcessSubtaskRequest。代码:System.Net.WebException。

    我确实用了 S3媒体预留单元

    1 回复  |  直到 7 年前
        1
  •  0
  •   Anil Murching    7 年前

    将解决方案发回此线程以确保完整性

    1. 房间里有个窃听器 sample 代码(RunAsync()方法),这导致作业使用了不正确的输出资产。这个错误现在已经被修复了。
    2. 正在解决错误处理中的相关错误
    推荐文章