But first we need to some background music for our work

Gaming Machine (OBS Studio)

  • Stream > Stream Type: Custom streaming Sever rtmp://encodingserver:1935/live/
  • Output > Streaming
  • Encoder: H264/AVC Encoder (AMD Advanced Media Framework)
  • Preset: Reset to Default
  • Target Bitrate: 25000 (25mbps)

Gaming Machine (AMD Relive)

  • Relive > Streaming
  • Custom Stream Enabled
  • Server URL rtmp://encodingserver:1935/live/
  • Connection Key blank
  • Streaming Profile Custom
  • Streaming Resolution 1080p
  • Streaming Bitrate 20 Mbps
  • Streaming FPS 60
  • Audio Bitrate 192 kbps

Rant@AMD why cant people with non-16:9 display have a crop/pan option!
so that we can crop 1920x1200 to 1920x1080?

with ffmpeg you can do -vf "crop=1920:1080:60:60"

panning would also been nice...

Windows Encoding Server (Nginx/FFMPEG Simulcast)

Recommended Hardware for 1080p: Ryzen 1700/1600
Recommended Hardware for 720p: Ryzen 1500X

if your using a server on the intertubes please add auth or restrict by ip
http://nginx-rtmp.blogspot.no/2013/06/secure-links-in-nginx-rtmp.html
https://helping-squad.com/nginx-rtmp-secure-your-nginx-server/

  • Download: https://github.com/nwgat/ninjastreamer/archive/master.zip
  • Open conf/nginx.conf in notepad
  • Change push urls under liveout
  • Run ninjastreamer.1080p.bat for 1080p 6mbps
  • Run ninjastreamer.720p.bat for 720p 3mbps
  • in OBS Studio click start streaming
  • Run stop nginx.bat to stop nginx
  • Run kill nginx and ffmpeg.bat to taskkill if it hangs

Linux Encoding Server (Nginx/FFMPEG Simulcast)

Recommended Hardware for 1080p: Ryzen 1700/1600
Recommended Hardware for 720p: Ryzen 1500X

if your using a server on the intertubes please add auth or restrict by ip
http://nginx-rtmp.blogspot.no/2013/06/secure-links-in-nginx-rtmp.html
https://helping-squad.com/nginx-rtmp-secure-your-nginx-server/

  • sudo apt-get install ffmpeg nano git
  • git clone https://github.com/nwgat/ninjastreamer && cd ninjastreamer
  • nano conf/nginx.conf
  • Change push urls under liveout
  • chmod 777 nginx
  • chmod 777 ninjastreamer.*
  • Run sh ninjastreamer.1080p.sh for 1080p 6mbps
  • Run sh ninjastreamer.720p.sh for 720p 3mbps
  • in OBS Studio click start streaming
  • Run pkill -9 nginx && pkill -9 ffmpeg to kill if it hangs

Notes

  • Depending on your CPU you can change x264 quality with preset from ultrafast,superfast, veryfast, faster, fast, medium
  • You can even use hardware encoders like h264_amf, h264_nvenc or h264_qs

*because i was bored





  • sudo apt-get install kernel-package fakeroot build-essential libssl-dev
  • sudo apt-get build-dep linux-image-$(uname -r)
  • git clone -b amd-staging-4.7 --single-branch git://people.freedesktop.org/~agd5f/linux/
  • make localmodconfig
  • fakeroot make-kpkg --append-to-version "-amd" --initrd -j 8 linux-image linux-headers
  • sudo dpkg -i ../linux-*
  • sudo apt-get remove yournewkernelhere

there are some quirks on HDMI 2.0 but they arnt that bad and their seems to be pretty complete support with the amdgpu-pro drivers

am using a Samsung UE55HU7505 55" 4K television using HDMI 2.0, you might not need amdgpu-pro but for my television i needed the pro drivers

  • You must use Ubuntu 16.04 LTS or Linux 4.4 (i used xubuntu)
  • You must use AMDGPU-PRO Drivers! (if you using HDMI 2.0 4K television)
  • 4K AVC works fine
  • 4k HEVC Main works fine
  • 4k HEVC Main10 (vpau nope, not implemented currently in libvdpau?)
  • 4k HEVC Main10 (vaapi works with mpv, we lose quality due to outdated surfaces and stuff but will play in hardware)
  • also HEVC Main10 migh work in kodi 16 using older render engine
  • Rant: wtf is it with DPI and Linux? its stupidly small by default :/
  • You can ignore DISPLAY=:0 if you are not using ssh in this guide
  • FYI: all those screenshots are in all their 4k glory if you right click and open image in new tab

But first we need to some background music for our work

Install amdgpu-pro, mpv & Kodi

First we install the latest beta/rc builds of kodi/mpv and the amd-gpu-pro driver ofc

  • sudo add-apt-repository ppa:team-xbmc/unstable -y
  • sudo add-apt-repository ppa:mc3man/mpv-tests -y
  • sudo apt-get update && sudo apt-get upgrade
  • sudo apt-get install kodi mpv vdpauinfo p7zip-full ppa-purge
  • wget --referer="http://support.amd.com/en-us/kb-articles/Pages/AMDGPU-PRO-Install.aspx" https://www2.ati.com/drivers/linux/ubuntu/amdgpu-pro-16.50-362463.tar.xz
  • 7z x amdgpu-pro-16.50-362463.tar.xz && 7z x amdgpu-pro-16.50-362463.tar
  • chmod +x amdgpu-pro-16.50-362463/amdgpu-pro-install
  • sudo amdgpu-pro-16.50-362463/amdgpu-pro-install

Fixing vdpau & vaapi

  • sudo mkdir -p /usr/lib/x86_64-linux-gnu/vdpau/
  • sudo mkdir -p /usr/lib/i386-linux-gnu/vdpau/
  • sudo ln -s /opt/amdgpu-pro/lib/x86_64-linux-gnu/vdpau/libvdpau_amdgpu.so.* /usr/lib/x86_64-linux-gnu/vdpau/
  • sudo ln -s /opt/amdgpu-pro/lib/i386-linux-gnu/vdpau/libvdpau_amdgpu.so.* /usr/lib/i386-linux-gnu/vdpau/
  • sudo ln -s /opt/amdgpu-pro/lib/x86_64-linux-gnu/dri/radeonsi_drv_video.so /usr/lib/x86_64-linux-gnu/dri/amdgpu_drv_video.so

Fixing Tearing

  • sudo nano /usr/share/X11/xorg.conf.d/10-amdgpu-pro.conf
Section "OutputClass"  
        Identifier "amdgpu-pro"
        MatchDriver "amdgpu"
        Driver "amdgpu"
EndSection

Section "Files"  
        ModulePath "/opt/amdgpu-pro/lib/xorg/modules"
        ModulePath "/usr/lib/xorg/modules"
EndSection

Section "Device"  
Identifier  "Card0"  
Driver      "amdgpu"  
BusID       "PCI:1:0:0"  
Option      "DRI3" "1"  
Option "TearFree" "on"  
EndSection  

Kodi 17

adding amdgpu temperature to kodi

nano $HOME/.kodi/userdata/advancedsettings.xml

<advancedsettings>  
<gputempcommand>sensors amdgpu-pci-0100 | sed -ne "s/temp1: \+[-+]\([0-9]\+\).*/\1 C/p"</gputempcommand>  
</advancedsettings>  

Use mpv for HEVC Main10 Content (seem to work but we lose quality due to outdated surfaces and stuff but it will play in hardware on a underpowered system)

nano $HOME/.kodi/userdata/playercorefactory.xml

<playercorefactory>  
 <players>
   <player name="mpv" type="ExternalPlayer" audio="false" video="true">
     <filename>mpv</filename>
     <args>--hwdec=vaapi --fs</args>
     <hidexbmc>false</hidexbmc>
     <hideconsole>false</hideconsole>
     <warpcursor>none</warpcursor>
   </player>
 </players>
 <rules action="prepend">
   <rule filetypes="mkv|mp4" filename=".*hevc.*" player="mpv"/>
 </rules>
</playercorefactory>  

now we need to add kodi to autostart
Xfce Menu -> Settings (-> Xfce 4 Settings Manager) -> Session and Startup -> Application Autostart tab

Uninstall

  • ./amdgpu-pro-install -u (Uninstall amdgpu-pro)
  • ppa-purge team-xbmc/unstable (remove kodi betas)
  • ppa-purge mc3man/mpv-tests (remove mpv betas

### below is just testing and vainfo/vdpauinfo logs ###

mpv vdpau testing (thanks jell.yfish.us for samples, missing a HEVC Main 4k sample? )

wget http://jell.yfish.us/media/jellyfish-100-mbps-hd-h264.mkv  
wget http://jell.yfish.us/media/jellyfish-100-mbps-hd-hevc.mkv  
wget http://jell.yfish.us/media/jellyfish-120-mbps-4k-uhd-hevc-10bit.mkv  
wget http://jell.yfish.us/media/jellyfish-120-mbps-4k-uhd-h264.mkv  
wget http://download.tsi.telecom-paristech.fr/gpac/dataset/dash/uhd/mux_sources/hevcds_2160p60_20M.mp4  
wget http://download.tsi.telecom-paristech.fr/gpac/dataset/dash/uhd/mux_sources/hevcds_2160p60_Main10_20M.mp4  
DISPLAY=:0 mpv --hwdec=vdpau --fs jellyfish-* hevcds_2160p60_*  
Playing: jellyfish-100-mbps-hd-h264.mkv  
 (+) Video --vid=1 (*) (h264)
Warning: LLVM emitted unknown config register: 0x4  
Using hardware decoding (vdpau).  
VO: [opengl] 1920x1080 vdpau  
V: 00:00:30 / 00:00:30 (100%)  
Playing: jellyfish-100-mbps-hd-hevc.mkv  
 (+) Video --vid=1 (*) (hevc)

Using hardware decoding (vdpau).  
VO: [opengl] 1920x1080 vdpau  
V: 00:00:29 / 00:00:30 (99%)  
Playing: jellyfish-120-mbps-4k-uhd-h264.mkv  
 (+) Video --vid=1 (*) (h264)

Using hardware decoding (vdpau).  
VO: [opengl] 3840x2160 vdpau  
V: 00:00:29 / 00:00:30 (99%)  
Playing: jellyfish-120-mbps-4k-uhd-hevc-10bit.mkv  
 (+) Video --vid=1 (*) (hevc)

Using software decoding.  
VO: [opengl] 3840x2160 yuv420p10  
V: 00:00:28 / 00:00:30 (94%)  

rx 460 vdpauinfo report

vdpauinfo --display :0 > vdpau_rx460.txt  
display: :0   screen: 0  
API version: 1  
Information string: G3DVL VDPAU Driver Shared Library version 1.0

Video surface:

name   width height types  
-------------------------------------------
420    16384 16384  NV12 YV12  
422    16384 16384  UYVY YUYV  
444    16384 16384  Y8U8V8A8 V8U8Y8A8 

Decoder capabilities:

name                        level macbs width height  
----------------------------------------------------
MPEG1                          --- not supported ---  
MPEG2_SIMPLE                    3 65536  4096  4096  
MPEG2_MAIN                      3 65536  4096  4096  
H264_BASELINE                  52 65536  4096  4096  
H264_MAIN                      52 65536  4096  4096  
H264_HIGH                      52 65536  4096  4096  
VC1_SIMPLE                      1 65536  4096  4096  
VC1_MAIN                        2 65536  4096  4096  
VC1_ADVANCED                    4 65536  4096  4096  
MPEG4_PART2_SP                  3 65536  4096  4096  
MPEG4_PART2_ASP                 5 65536  4096  4096  
DIVX4_QMOBILE                  --- not supported ---  
DIVX4_MOBILE                   --- not supported ---  
DIVX4_HOME_THEATER             --- not supported ---  
DIVX4_HD_1080P                 --- not supported ---  
DIVX5_QMOBILE                  --- not supported ---  
DIVX5_MOBILE                   --- not supported ---  
DIVX5_HOME_THEATER             --- not supported ---  
DIVX5_HD_1080P                 --- not supported ---  
H264_CONSTRAINED_BASELINE      --- not supported ---  
H264_EXTENDED                  --- not supported ---  
H264_PROGRESSIVE_HIGH          --- not supported ---  
H264_CONSTRAINED_HIGH          --- not supported ---  
H264_HIGH_444_PREDICTIVE       --- not supported ---  
HEVC_MAIN                      186 65536  4096  4096  
HEVC_MAIN_10                   186 65536  4096  4096  
HEVC_MAIN_STILL                --- not supported ---  
HEVC_MAIN_12                   --- not supported ---  
HEVC_MAIN_444                  --- not supported ---

Output surface:

name              width height nat types  
----------------------------------------------------
B8G8R8A8         16384 16384    y  NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 A8I8 I8A8  
R8G8B8A8         16384 16384    y  NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 A8I8 I8A8  
R10G10B10A2      16384 16384    y  NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 A8I8 I8A8  
B10G10R10A2      16384 16384    y  NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 A8I8 I8A8 

Bitmap surface:

name              width height  
------------------------------
B8G8R8A8         16384 16384  
R8G8B8A8         16384 16384  
R10G10B10A2      16384 16384  
B10G10R10A2      16384 16384  
A8               16384 16384

Video mixer:

feature name                    sup  
------------------------------------
DEINTERLACE_TEMPORAL             y  
DEINTERLACE_TEMPORAL_SPATIAL     -  
INVERSE_TELECINE                 -  
NOISE_REDUCTION                  y  
SHARPNESS                        y  
LUMA_KEY                         -  
HIGH QUALITY SCALING - L1        -  
HIGH QUALITY SCALING - L2        -  
HIGH QUALITY SCALING - L3        -  
HIGH QUALITY SCALING - L4        -  
HIGH QUALITY SCALING - L5        -  
HIGH QUALITY SCALING - L6        -  
HIGH QUALITY SCALING - L7        -  
HIGH QUALITY SCALING - L8        -  
HIGH QUALITY SCALING - L9        -

parameter name                  sup      min      max  
-----------------------------------------------------
VIDEO_SURFACE_WIDTH              y        48     4096  
VIDEO_SURFACE_HEIGHT             y        48     4096  
CHROMA_TYPE                      y  
LAYERS                           y         0        4

attribute name                  sup      min      max  
-----------------------------------------------------
BACKGROUND_COLOR                 y  
CSC_MATRIX                       y  
NOISE_REDUCTION_LEVEL            y      0.00     1.00  
SHARPNESS_LEVEL                  y     -1.00     1.00  
LUMA_KEY_MIN_LUMA                y  
LUMA_KEY_MAX_LUMA                y  

mpv vaapi testing

DISPLAY=:0 mpv --hwdec=vaapi --fs jellyfish-* hevcds_2160p60_*  
Playing: Videos/jellyfish-100-mbps-hd-h264.mkv  
 (+) Video --vid=1 (*) (h264)
libva info: VA-API version 0.39.4  
libva info: va_getDriverName() returns 0  
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/amdgpu_drv_video.so  
libva info: Found init function __vaDriverInit_0_39  
Warning: LLVM emitted unknown config register: 0x4  
libva info: va_openDriver() returns 0  
Using hardware decoding (vaapi).  
VO: [opengl] 1920x1080 vaapi  
V: 00:00:29 / 00:00:30 (99%)

Playing: Videos/jellyfish-100-mbps-hd-hevc.mkv  
 (+) Video --vid=1 (*) (hevc)
Using hardware decoding (vaapi).  
VO: [opengl] 1920x1080 vaapi  
V: 00:00:29 / 00:00:30 (99%)

Playing: Videos/jellyfish-120-mbps-4k-uhd-h264.mkv  
 (+) Video --vid=1 (*) (h264)
Using hardware decoding (vaapi).  
VO: [opengl] 3840x2160 vaapi  
V: 00:00:29 / 00:00:30 (99%)

Playing: Videos/jellyfish-120-mbps-4k-uhd-hevc-10bit.mkv  
 (+) Video --vid=1 (*) (hevc)
Using hardware decoding (vaapi).  
VO: [opengl] 3840x2160 vaapi  
V: 00:00:29 / 00:00:30 (99%)

Playing: Videos/hevcds_2160p60_20M.mp4  
 (+) Video --vid=1 (*) (hevc)
 (+) Audio --aid=1 --alang=und (*) (aac)
AO: [pulse] 48000Hz stereo 2ch float  
Using hardware decoding (vaapi).  
AV: 00:02:31 / 00:02:31 (99%) A-V:  0.000

Playing: Videos/hevcds_2160p60_Main10_20M.mp4  
 (+) Video --vid=1 (*) (hevc)
 (+) Audio --aid=1 --alang=und (*) (aac)
Using hardware decoding (vaapi).  
AV: 00:02:31 / 00:02:31 (99%) A-V:  0.000 Dropped: 4


Exiting... (End of file)  

VaInfo Report

DISPLAY=:0 vainfo  
libva info: VA-API version 0.39.4  
libva info: va_getDriverName() returns 0  
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/amdgpu_drv_video.so  
libva info: Found init function __vaDriverInit_0_39  
Warning: LLVM emitted unknown config register: 0x4  
libva info: va_openDriver() returns 0  
vainfo: VA-API version: 0.39 (libva 1.7.3)  
vainfo: Driver version: mesa gallium vaapi  
vainfo: Supported profile and entrypoints  
      VAProfileMPEG2Simple            :    VAEntrypointVLD
      VAProfileMPEG2Main              :    VAEntrypointVLD
      VAProfileVC1Simple              :    VAEntrypointVLD
      VAProfileVC1Main                :    VAEntrypointVLD
      VAProfileVC1Advanced            :    VAEntrypointVLD
      VAProfileH264Baseline           :    VAEntrypointVLD
      VAProfileH264Main               :    VAEntrypointVLD
      VAProfileH264High               :    VAEntrypointVLD
      VAProfileHEVCMain               :    VAEntrypointVLD
      VAProfileHEVCMain10             :    VAEntrypointVLD
      VAProfileNone                   :    VAEntrypointVideoProc

Sources (thank you all)

Beam

AMD ReLive

  • Crimson Settings > ReLive > Streaming > Custom Stream
  • Server URL: Paste Closest Ingest here
  • Connection Key: Paste Stream Key here
  • Streaming Profile High (720p60 @ 3.5Mbps)

Notes:

  • test stream record https://beam.pro/nwgat?vod=655012 (source mp4)
  • The quality varies by scenes/games
  • AMD seems to be doing CABAC coding which is nice
  • ~I dont know if 2-Pass is enabled yet yep they are doing 2-Pass
  • no HEVC streaming (yet) even with a custom server
  • rant: why the heck do stream sites only do 3.5Mbps? its annoying

Ever wondered how the RX480 performs? look no further check out the short list below for indepth reviews and youtube reviews

Indepth Reviews

YouTube

Other

Receive $10 in credit at DigitalOcean for your VPS Hosting
€1.24 VPS from Time4VPs
Proudly published with Ghost | Theme based on Draugur | Header Image by GUWEIZ@DeviantArt
Creative Commons Licence