如何在MediaTranscoder中使用AMD AV1硬件编码器?
屏幕录制AV1硬编失败:MediaTranscoder找不到匹配编码器
我目前用MediaTranscoder配合GraphicsCaptureItem实现屏幕捕获并录制压缩视频。设备搭载Ryzen AI 7 350内置的Radeon 860M显卡,硬件支持H.264和AV1编码。通过以下代码可以枚举到这两种硬件编码器:
var codecQuery = new CodecQuery(); var videoEncoders = await codecQuery .FindAllAsync(CodecKind.Video, CodecCategory.Encoder, "");
其中能获取到子类型为{31305641-0000-0010-8000-00AA00389B71}的AMDav1Encoder。
我按如下方式创建MediaEncodingProfile:
var encodingProfile = MediaEncodingProfile.CreateAv1(VideoEncodingQuality.Auto); encodingProfile.Video = VideoEncodingProperties.CreateAv1(); encodingProfile.Video.Bitrate = 10_000_000; encodingProfile.Video.FrameRate.Numerator = 20; encodingProfile.Video.FrameRate.Denominator = 1; encodingProfile.Video.PixelAspectRatio.Numerator = 1; encodingProfile.Video.PixelAspectRatio.Denominator = 1; encodingProfile.Video.ProfileId = 0; // 配置音频输入 encodingProfile.Audio = MediaEncodingProfile.CreateM4a(AudioEncodingQuality.Low).Audio; encodingProfile.Audio.SampleRate = 48000; await _transcoder.PrepareMediaStreamSourceTranscodeAsync(_mediaStreamSource, destination, encodingProfile);
最后一行调用抛出COMException,错误码0xC00DA412,对应MF_E_TRANSCODE_NO_MATCHING_ENCODER,提示转码器找不到AV1编码器。需要说明的是_transcoder.HardwareAccelerationEnabled已设为true。
已尝试的解决方法
- 使用H.264编码:将两处
CreateAv1替换为CreateMp4和CreateH264后可正常工作,但无法使用AV1编码; - 修改
ProfileId:设为0(默认值1时同样报错),问题依旧; - 转换捕获源格式:将屏幕捕获源格式从Bgra8改为NV12(猜测编码器仅支持NV12输入),仍抛出相同的
MF_E_TRANSCODE_NO_MATCHING_ENCODER错误。
encodingProfile.Video.Properties 参数信息
- {23e5cad8-a3fc-4f0f-97c3-dff51d03bc92} - 1 (uint)
- {c6376a1e-8d0a-4027-be45-6d9a0ad39bb6} - 4294967297 (ulong)
- {48eba18e-f8c9-4687-bf11-0a74c9f96a8f} - {73646976-0000-0010-8000-00aa00389b71} (System.Guid)
- {c459a2e8-3d2c-4e44-b132-fee5156c7bb0} - 42949672961 (ulong)
- {20332624-fb0d-4d9e-bd0d-cbf6786c102e} - 10000000 (uint)
- {1652c33d-d6b2-4012-b834-72030849a37d} - 16492674418800 (ulong)
- {f7e34c9a-42e8-4714-b74b-cb29d72c35e5} - {31305641-0000-0010-8000-00aa00389b71} (AV1子类型)
- {ad76a80b-2d5c-4e0b-b375-64e520137036} - 1 (uint,即配置文件)
尝试HEVC编码(将CreateAv1替换为CreateHEVC)同样失败,错误码0xC00D6D60对应MF_E_TRANSFORM_TYPE_NOT_SET,该问题在Nvidia GPU设备上未出现。
内容的提问来源于stack exchange,提问作者LOST
相关产品推荐
相关产品推荐

