Trying to stream AV1 in OBS Studio

Hi. I recently got Radeon RX 7900 XTX and I’m trying to test AV1 streaming. I’m using mesa drivers from nonfree.eu repository (amdgpu). Neither obs-studio nor obs-studio-rc show hardware video encoders. I installed obs-studio-amf and it does show hardware encoders but I have 2 issues:

  1. The only encoders in Settings > Output > Streaming are:
  • AMD HW H.264 (AVC)
  • FFmpeg VAAPI H.264
  • x264

There’s no AMD HW A1 or AMD HW H265.

  1. New hardware video encoders are available in Recording section but when I select AMD HW A1 and click Start Recording my whole PC freezes and the only thing I can do is hard reset. Before it freezes I can see a flicker of “Failed to read gpu_busy_percent” on the system status bar (i3status-rs GPU module that shows temperature, utilisation %, video RAM usage, etc).

Are those issues normal? Is there no support for AV1 for streaming in OBS for Linux yet and is AV1 recording in OBS for Linux unstable?

Description: Manjaro Linux 6.5.3-1-MANJARO
Release: 23.0.2
Codename: Uranos
OBS Studio: 29.1.3-1 (64 bit)

I can use AMD HW H.264 (AVC) for streaming and AMD HW H.265 (HEVC) for recording without issues. I just wanted to use the A1, since my new GPU has it and it’s supposed to be way better.

OBS log file
18:46:00.504: Using EGL/X11
18:46:00.504: CPU Name: Intel(R) Core(TM) i5-6600K CPU @ 3.50GHz
18:46:00.504: CPU Speed: 3729.391MHz
18:46:00.504: Physical Cores: 4, Logical Cores: 4
18:46:00.504: Physical Memory: 15958MB Total, 5403MB Free
18:46:00.504: Kernel Version: Linux 6.5.3-1-MANJARO
18:46:00.504: Distribution: "Manjaro Linux" Unknown
18:46:00.504: Desktop Environment: i3 (i3)
18:46:00.504: Session Type: x11
18:46:00.504: Window System: X11.0, Vendor: The X.Org Foundation, Version: 1.21.1
18:46:00.505: Qt Version: 6.5.2 (runtime), 6.5.2 (compiled)
18:46:00.505: Portable mode: false
18:46:00.559: OBS 29.1.3-1 (linux)
18:46:00.559: ---------------------------------
18:46:00.560: ---------------------------------
18:46:00.560: audio settings reset:
18:46:00.560: 	samples per sec: 44100
18:46:00.560: 	speakers:        2
18:46:00.560: 	max buffering:   1044 milliseconds
18:46:00.560: 	buffering type:  dynamically increasing
18:46:00.566: ---------------------------------
18:46:00.566: Initializing OpenGL...
18:46:00.617: Loading up OpenGL on adapter AMD AMD Radeon RX 7900 XTX (gfx1100, LLVM 16.0.6, DRM 3.54, 6.5.3-1-MANJARO)
18:46:00.617: OpenGL loaded successfully, version 4.6 (Core Profile) Mesa 23.1.7-1, shading language 4.60
18:46:00.648: ---------------------------------
18:46:00.648: video settings reset:
18:46:00.648: 	base resolution:   3840x2160
18:46:00.648: 	output resolution: 2560x1440
18:46:00.648: 	downscale filter:  Lanczos
18:46:00.648: 	fps:               30/1
18:46:00.648: 	format:            NV12
18:46:00.648: 	YUV mode:          Rec. 709/Partial
18:46:00.648: NV12 texture support not available
18:46:00.648: P010 texture support not available
18:46:00.652: Audio monitoring device:
18:46:00.652: 	name: Default
18:46:00.652: 	id: default
18:46:00.653: ---------------------------------
18:46:00.659: Failed to load 'en-US' text for module: 'decklink-captions.so'
18:46:00.667: Failed to load 'en-US' text for module: 'decklink-output-ui.so'
18:46:00.672: A DeckLink iterator could not be created.  The DeckLink drivers may not be installed
18:46:00.672: Failed to initialize module 'decklink.so'
18:46:00.683: Failed to load 'en-GB' text for module: 'frontend-tools.so'
18:46:00.823: Failed to load 'en-GB' text for module: 'linux-alsa.so'
18:46:00.830: Failed to load 'en-GB' text for module: 'linux-capture.so'
18:46:00.846: Failed to load 'en-GB' text for module: 'linux-jack.so'
18:46:00.865: Failed to load 'en-GB' text for module: 'linux-pipewire.so'
18:46:00.866: [pipewire] No captures available
18:46:00.873: Failed to load 'en-GB' text for module: 'linux-pulseaudio.so'
18:46:00.884: v4l2loopback not installed, virtual camera disabled
18:46:00.891: Failed to load 'en-GB' text for module: 'linux-vkcapture.so'
18:46:00.891: [linux-vkcapture] plugin loaded successfully (version 1.4.3)
18:46:00.902: [obs-browser]: Version 2.21.1
18:46:00.902: [obs-browser]: CEF Version 103.0.5060.134 (runtime), 103.0.0-5060-shared-textures_143.2591+g4204d54+chromium-103.0.5060.134 (compiled)
18:46:01.031: VAAPI: API version 1.20
18:46:01.033: FFmpeg VAAPI H264 encoding supported
18:46:01.039: FFmpeg VAAPI HEVC encoding supported
18:46:01.068: Failed to load 'en-GB' text for module: 'obs-vst.so'
18:46:01.084: Failed to load 'en-GB' text for module: 'obs-websocket.so'
18:46:01.084: [obs-websocket] [obs_module_load] you can haz websockets (Version: 5.2.3 | RPC Version: 1)
18:46:01.084: [obs-websocket] [obs_module_load] Qt version (compile-time): 6.5.2 | Qt version (run-time): 6.5.2
18:46:01.084: [obs-websocket] [obs_module_load] Linked ASIO Version: 102800
18:46:01.089: [obs-websocket] [obs_module_load] Module loaded.
18:46:01.104: Failed to load 'en-GB' text for module: 'rtmp-services.so'
18:46:01.111: ---------------------------------
18:46:01.111:   Loaded Modules:
18:46:01.111:     text-freetype2.so
18:46:01.111:     rtmp-services.so
18:46:01.111:     obs-x264.so
18:46:01.111:     obs-websocket.so
18:46:01.111:     obs-vst.so
18:46:01.111:     obs-transitions.so
18:46:01.111:     obs-outputs.so
18:46:01.111:     obs-filters.so
18:46:01.111:     obs-ffmpeg.so
18:46:01.111:     obs-browser.so
18:46:01.111:     linux-vkcapture.so
18:46:01.111:     linux-v4l2.so
18:46:01.111:     linux-pulseaudio.so
18:46:01.111:     linux-pipewire.so
18:46:01.111:     linux-jack.so
18:46:01.111:     linux-capture.so
18:46:01.111:     linux-alsa.so
18:46:01.111:     image-source.so
18:46:01.111:     frontend-tools.so
18:46:01.111:     decklink-output-ui.so
18:46:01.111:     decklink-captions.so
18:46:01.111: ---------------------------------
18:46:01.111: ==== Startup complete ===============================================
18:46:01.113: Encoder ID 'libfdk_aac' not found
18:46:01.113: Encoder ID 'libfdk_aac' not found
18:46:01.164: All scene data cleared
18:46:01.164: ------------------------------------------------
18:46:01.177: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.80) 15.0.0'
18:46:01.178: pulse-input: An error occurred while getting the source info!
18:46:01.178: [Loaded global audio device]: 'Desktop Audio'
18:46:01.178:     - filter: 'Gain' (gain_filter)
18:46:01.179: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.80) 15.0.0'
18:46:01.180: pulse-input: An error occurred while getting the source info!
18:46:01.180: [Loaded global audio device]: 'Desktop Audio 2'
18:46:01.181: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.80) 15.0.0'
18:46:01.181: pulse-input: An error occurred while getting the source info!
18:46:01.184: [Loaded global audio device]: 'Mic/Aux'
18:46:01.184:     - filter: 'Noise Suppression' (noise_suppress_filter)
18:46:01.184:     - filter: 'Compressor' (compressor_filter)
18:46:01.185: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.80) 15.0.0'
18:46:01.186: pulse-input: An error occurred while getting the source info!
18:46:01.264: [window-capture: 'Client Window'] update settings:
18:46:01.264: 	title: unknown
18:46:01.264: 	class: unknown
18:46:01.264: 
18:46:01.264: v4l2-input: Start capture from /dev/video0
18:46:01.264: v4l2-input: Input: 0
18:46:01.324: v4l2-input: Resolution: 1920x1080
18:46:01.324: v4l2-input: Pixelformat: MJPG
18:46:01.324: v4l2-input: Linesize: 0 Bytes
18:46:01.324: v4l2-input: Framerate: 30.00 fps
18:46:01.330: v4l2-input: /dev/video0: select timeout set to 166666 (5x frame periods)
18:46:01.333: Switched to scene 'Pause'
18:46:01.333: ------------------------------------------------
18:46:01.333: Loaded scenes:
18:46:01.333: - scene 'Pause':
18:46:01.333:     - source: 'Please Stand By' (image_source)
18:46:01.333:     - source: 'Webcam' (v4l2_input)
18:46:01.333:         - filter: 'Crop/Pad' (crop_filter)
18:46:01.333:     - source: 'Microphone' (pulse_input_capture)
18:46:01.333:         - filter: 'Noise Suppression' (noise_suppress_filter_v2)
18:46:01.333:         - filter: 'Compressor' (compressor_filter)
18:46:01.333: - scene 'Game':
18:46:01.333:     - source: 'Game Capture' (vkcapture-source)
18:46:01.333:     - source: 'Webcam' (v4l2_input)
18:46:01.333:         - filter: 'Crop/Pad' (crop_filter)
18:46:01.333:     - source: 'Microphone' (pulse_input_capture)
18:46:01.333:         - filter: 'Noise Suppression' (noise_suppress_filter_v2)
18:46:01.333:         - filter: 'Compressor' (compressor_filter)
18:46:01.333: - scene 'Steam':
18:46:01.333:     - source: 'Client Window' (xcomposite_input)
18:46:01.333:     - source: 'Webcam' (v4l2_input)
18:46:01.334:         - filter: 'Crop/Pad' (crop_filter)
18:46:01.334:     - source: 'Microphone' (pulse_input_capture)
18:46:01.334:         - filter: 'Noise Suppression' (noise_suppress_filter_v2)
18:46:01.334:         - filter: 'Compressor' (compressor_filter)
18:46:01.334: - scene 'Facecam':
18:46:01.334:     - source: 'Webcam' (v4l2_input)
18:46:01.334:         - filter: 'Crop/Pad' (crop_filter)
18:46:01.334:     - source: 'Microphone' (pulse_input_capture)
18:46:01.334:         - filter: 'Noise Suppression' (noise_suppress_filter_v2)
18:46:01.334:         - filter: 'Compressor' (compressor_filter)
18:46:01.334:     - filter: 'Crop/Pad' (crop_filter)
18:46:01.334:     - filter: 'Scaling/Aspect Ratio' (scale_filter)
18:46:01.334: ------------------------------------------------
18:46:01.502: v4l2-input: /dev/video0: select timed out
18:46:01.502: v4l2-input: /dev/video0: failed to log status
18:46:01.669: v4l2-input: /dev/video0: select timed out
18:46:01.669: v4l2-input: /dev/video0: failed to log status
18:46:35.247: encoder 'advanced_video_stream': Scaled resolution matches output resolution, scaling disabled
18:46:35.389: [fallback-amf-av1: 'advanced_video_recording'] settings:
18:46:35.389: 	rate_control: CBR
18:46:35.389: 	bitrate:      2500
18:46:35.389: 	cqp:          20
18:46:35.389: 	keyint:       250
18:46:35.389: 	preset:       balanced
18:46:35.389: 	profile:      main
18:46:35.389: 	width:        2560
18:46:35.389: 	height:       1440
18:46:35.389: 	params:       (none)
18:46:35.396: ---------------------------------
18:46:35.396: [FFmpeg libopus encoder: 'Game and commentary'] bitrate: 192, channels: 2, channel_layout: stereo
18:46:35.396: 
18:46:35.396: ---------------------------------
18:46:35.396: [FFmpeg libopus encoder: 'Game'] bitrate: 192, channels: 2, channel_layout: stereo
18:46:35.396: 
18:46:35.396: ---------------------------------
18:46:35.396: [FFmpeg libopus encoder: 'Commentary'] bitrate: 192, channels: 2, channel_layout: stereo
18:46:35.396: 
18:46:35.396: [ffmpeg muxer: 'adv_file_output'] Using muxer settings:
18:46:35.396: 	movflags=frag_keyframe+empty_moov+delay_moov
18:46:35.407: ==== Recording Start ===============================================
18:46:35.408: [ffmpeg muxer: 'adv_file_output'] Writing file '/home/cg/Videos/2023-09-23.18-46-35.mp4'...
18:46:40.909: User switched to scene 'Game'
18:46:40.992: [fallback-amf-av1: 'advanced_video_recording'] amf_encode_fallback: SubmitInput timed out: AMF_INPUT_FULL
18:46:40.992: Error encoding with encoder 'advanced_video_recording'
18:46:40.994: [ffmpeg muxer: 'adv_file_output'] Output of file '/home/cg/Videos/2023-09-23.18-46-35.mp4' stopped
18:46:40.994: Output 'adv_file_output': stopping
18:46:40.994: Output 'adv_file_output': Total frames output: 0
18:46:40.994: Output 'adv_file_output': Total drawn frames: 168
18:46:40.994: ==== Recording Stop ================================================

(at the end there’s bunch of binary data that didn’t copy)

Different configuration depends on different streaming service.
For example:

  • Twitch supports only H264, but not H265 and not AV1.
  • Youtube supports AV1 and H265 …

Try to change settings:

  1. Settings → Stream → Service → Change Twitch to Custom.
  2. Settings → Stream → Output → Streaming to see all supported video encodings.

There are many different AV1 tools.
Do you have AOM AV1 and SVT-AV1? I have both but my GPU doesn’t have AV1 hardware acceleration.

You’re right about 1st issue! I’m setting up the stream to confirm it fully works but yes, HW A1 appears for YouTube! Thank you!

Yes, I have SVT-AV1 and AOM AV1 but these are software AV1 encoders. I’ll try to figure out different settings for AMD HW AV1, maybe OBS is feeding the encoder some weird stuff by default…

OBS studio uses the dependency ffmpeg that already supports AMD AMF AV1 as hardware encoder.

Source: Encode/AV1 – FFmpeg

Check if it works?

$ ffmpeg -i input.mp4 -c:v av1_amf -quality speed output.mp4

Sorry for delay. I tried ffmpeg av1 encoding in terminal and it froze the system in the same way as soon as it displayed the usual ETA / estimated bitrate line.

What I’ve also noticed is obs-studio-amf shows AMD HW encoders for:

  • H.264
  • H.265
  • AV1

but FFmpeg VAAPI encoders only for:

  • H.264
  • H.265

OBS doesn’t show/detect FFmpeg AV1…? So maybe it’s a known fact hardware AV1 doesn’t work on Linux? Or doesn’t work with Radeon 7000 series yet? Regardless if it’s interfaced through FFmpeg (VAAPI/AMF) or directly?

If it doesn’t work now and will start working in the future - that’s awesome, I’m happy with that. But I’m worried it should be working without issue and my 2nd hand GPU is broken (I have only 4 months to make a warranty complaint).

There is no right answer to your question since you are the only one in the forum who tried AV1 with AMD Rx7000 series earlier.

I believe ffmpeg does not fully support AMF yet, as it lacks a feature Filtering.

https://trac.ffmpeg.org/wiki/HWAccelIntro#FFmpegAPIImplementationStatus

It looks like ffmpeg supports VAAPI (mesa) more than AMF.
I think mesa version 23.3.x or newer has av1_vaapi for AMD RX7000 series, but today we are using mesa version 23.1.x that does not have it.

See git merge to mesa:

I’ve found this ffmpeg related information:

The AV1 specification is currently an experimental specification developed in collaboration with the ​Mesa project. As such, it should not be expected to be implemented on any other drivers currently, but once an official specification is available, the decoder will be ported to use it.

So, I guess, you’re right. I’ll have to wait for mesa implementation - hopefully new version will be released soon.

This topic was automatically closed 2 days after the last reply. New replies are no longer allowed.