GRUPPO DI STEAM
Steam Remote Play homestream
GRUPPO DI STEAM
Steam Remote Play homestream
4,836
IN GIOCO
40,024
ONLINE
Creato:
7 novembre 2013
Tutte le discussioni > General Discussion > Dettagli della discussione
VCE Quality Discussion
I'm going to start with the tl;dr: VCE quality on Steam In-Home Streaming isn't very good, and it's especially bad on GCN 1.1 cards.

With the release of AMD VCE hardware encoding today, I thought I'd do a little quality comparison. First, the setup:

Host:
Intel i7 4790k @ 4.7ghz
16GB RAM
Radeon R9 290x
WIndows 8.1 Pro
Catalyst 14.8

Client:
AMD A8-3850
8GB RAM
Radeon 7870
WIndows 8.1 Pro
Catalyst 14.8

Both the host and client are wired. All NICs, routers, and switches are 1gbps, so bandwidth should not be an issue.

In one test below (the one with the radeon 7870 doing the encoding), client and host duties swapped. The other 3 images use the client/host configuration above. Client quality was set to Balanced on both systems with bandwidth set to automatic.

I used Giana Sisters: Twisted Dreams as my test as it's one of the few games I had installed on both the client and the host. I'm downloading Tomb Raider as I write this to test with something a bit more demanding. (Update: Tomb Raider results at end of post). I picked a spot near the beginning of level 1-2, ran, and jumped so I would be moving, as all encoders produce excellent results when standing still - and nobody plays a game by doing nothing.

Links to images:
Reference image captured on host (no compression)[i.imgur.com]
Software Encoding[i.imgur.com]
Haswell Quicksync Hardware Encoding[i.imgur.com] (note: Ivy Bridge and Sandy Bridge have lower quicksync quality than Haswell, but I don't have a system with either of those to provide samples)
AMD VCE Encoding - Radeon 7870[i.imgur.com]
AMD VCE Encoding - Radeon R9 290x[i.imgur.com]
Nvidia NVENC[i.imgur.com] (thanks to [masni] HEADLESS for the nvenc image!)

I'm sure everyone can draw their own conclusions, but here's what I observed:
All methods of encoding lose a fair bit of texture quality, which is to be expected. Software encoding and Quicksync look similar in that they remain non-blocky (if a bit blurry), though software seems to retain a bit more quality. Update: We have an nvenc capture now! NVENC looks to retain even more quality than software encoding, and seems to be the way to go if you have a card supporting it (geforce 600 series or newer). VCE encoding on both Radeon cards is very blocky compared to software/quicksync/nvenc, but it's noticeably worse on the 290x.

Looking at bitrates, we see the likely culprit: the host system with the 290x is encoding at a significantly lower bitrate than the 7870. This seemed strange to me, I wondered if I just happened to catch a bad frame, so I reran the test. The results were the same: the 290x consistently encoded at ~4mbps less than the other options.

This seems to be a configuration issue on Steam's end. I've used VCE encoding in conjunction with other applications at much higher bitrates and it is capable of producing very good quality output. Given the poor quality of VCE at these low bitrates in general, however, it may be wise for Steam to favor a higher bitrate (perhaps closer to 20mbps) when using the VCE encoder. I'd consider this doubly important to quality as the blocky quality of the VCE encoding versus the smooth quality of software/quicksync is even more noticeable in motion than it is in the screenshots.


UPDATE: Tomb Raider Images
Reference image captured on host (no compression)[i.imgur.com]
Software Encoding[i.imgur.com]
Haswell Quicksync Hardware Encoding[i.imgur.com] (forcing DX9 in Tomb Raider changes the image significantly - sorry, unless someone can tell me another way to force quicksync over VCE, this is the best I can provide)
AMD VCE Encoding - Radeon 7870[i.imgur.com]
AMD VCE Encoding - Radeon R9 290x[i.imgur.com]

For these, I wobbled the camera around when taking screenshots, which should have the same result as running around as far as the encoders are concerned.

Ignoring the obvious lighting differences in the Quicksync sample due to forcing DX9, the results are largely the same as with Giana Sisters: they look fairly similar, but software encoding retains a bit more detail. Software encoding and Quicksync both produce a very smooth image free of blockiness.

A little oddity has appeared in Tomb Raider with VCE encoding: the 290x now has the bitrate advantage. I double checked once again and it was consistent - the 290x encoded at a higher bitrate in Tomb Raider than the 7870. I'm not sure if the 7870 was starved for resources (notice it's pushing about 40FPS rather than 60) or if something else is going on here. Quality-wise, they look similar. Parts of the 7870 image look a little better, other parts of the 290x image look a little better, but on the whole they're both blocky and ugly. The sky color difference in the 290x shot was due to the game, not the encoder.

If anyone has any other games they want to see tested, let me know and I'll do more whenever I have time.
Ultima modifica da Martelol; 4 set 2014, ore 8:17
< >
Visualizzazione di 1-15 commenti su 35
Great writeup. I wish you had some stats other than the bitrate, but you are correct. I experienced blockiness, low bitrate (6mbps) with VCE from a r9 280x (VCE 1.0). 1080p60fps stayed at 59.75 for most of it but the server bitrate didn't really peak. I doubt this is a limitation of VCE.

I will say that with some of the material I've seen on VCE, they tested it at 6mbps using what they called "latency constrained VBR(variable bit rate)" which was 6mbps bitrate with a 100kb buffer (which is a buffer big enough for 1 frame of video (which would be 16ms) buffering delay. the encoding process happens in the buffer, so the larger the buffer, the bigger the encoding delay.

intra-refresh=true

EDIT:
Also they set the IDR to 60

During the tests that I saw, the blockiness was fixed using an h264 method called intra-refresh (you can google it). I wont get in to the technicalities of it, but its supposed to imporove qualty.

I would recommend the in-home streaming guys to test with this and see how it works.

Ultima modifica da THE PING; 3 set 2014, ore 19:11
Messaggio originale di Martelol:
Correct, I mistakenly uploaded the software encoding image twice. I've uploaded the correct image and updated the link.
Yes and btw, thanks for doing this.
Messaggio originale di dubigrasu:
Messaggio originale di Martelol:
Correct, I mistakenly uploaded the software encoding image twice. I've uploaded the correct image and updated the link.
Yes and btw, thanks for doing this.
If only I had an nvidia card for my other system, I'd test nvenc quality too :D
The bitrate difference between the 7870 and the 290x in the Tomb Raider comparison is indeed because of the framerate difference. The bitrate is calculated for the target framerate, and if the game isn't capable of doing that, it will use less of the allocated bandwidth capacity.
Messaggio originale di slouken:
The bitrate difference between the 7870 and the 290x in the Tomb Raider comparison is indeed because of the framerate difference. The bitrate is calculated for the target framerate, and if the game isn't capable of doing that, it will use less of the allocated bandwidth capacity.
Good to know. I went and dropped a bunch of quality settings until I could stream at 60FPS and the bitrate did indeed go up to just over 16mbps.
there u go... nvenc, auto, balanced, same screenshoot ;)

http://i.imgur.com/ITVyTsh.jpg
here is 1080p d3d9 like your quicksync ss
http://i.imgur.com/pdbnRag.jpg

and here d3d11 1080p
http://i.imgur.com/JbH4ktc.jpg
Ultima modifica da [masni] CYKA CLEANER; 3 set 2014, ore 23:31
Messaggio originale di masni HEADLESS:
here is 1080p d3d9 like your quicksync ss
http://i.imgur.com/pdbnRag.jpg

and here d3d11 1080p
http://i.imgur.com/JbH4ktc.jpg
Awesome, thank you! Looks like nvenc produces even better quality than software encoding!
Thank you for reminding me of good old c64 times with this game haha :)
My experience with VCE is not good. The framerate fluctuates lot and statistics show 2-3 percent of dropped frames. This doesnt happen with software encoding so something is propably not working as it should be.
I just tried Metro: 2033 in DX9, DX10, DX11. Like someone in another thread said, VCE only activates in DX10 and DX11. Those look pretty nasty; like a seismograph during an earthquake. The DX9 software encode is still nice and flat.

R9 270 --> GTX 660 @ 720p
Ultima modifica da NeptNutz; 5 set 2014, ore 7:37
The quality should be improved in today's beta update. Please try it out and let us know what you think.
Don't have time to do a full set of images tonight, but did get Giana + TR as encoded on a 290x.

Giana Sisters:
Reference image captured on host (no compression)[i.imgur.com]
Software Encoding[i.imgur.com]
Haswell Quicksync Hardware Encoding[i.imgur.com]
AMD VCE Encoding - Radeon 7870[i.imgur.com]
AMD VCE Encoding - Radeon R9 290x (September 3)[i.imgur.com]
AMD VCE Encoding - Radeon R9 290x (September 8)[i.imgur.com]
Nvidia NVENC[i.imgur.com]


Tomb Raider:
Reference image captured on host (no compression)[i.imgur.com]
Software Encoding[i.imgur.com]
Haswell Quicksync Hardware Encoding[i.imgur.com] (forced DX9, hence ugly)
AMD VCE Encoding - Radeon 7870[i.imgur.com]
AMD VCE Encoding - Radeon R9 290x (September 3)[i.imgur.com]
AMD VCE Encoding - Radeon R9 290x (September 8)[i.imgur.com]


My initial thoughts are that it's significantly improved, but still the blurriest of the hardware encoding options. The bitrate issue in Giana Sisters is definitely fixed :)

My biggest concern now is something that can't be seen in screenshots. Even though the image is now much smoother and doesn't have the hard-edged blockiness it had before, you can still see blockiness (smoothed out, of course) as the encoder does its thing while things are in motion much more than software/quicksync. It just has the appearance of a lower-bitrate encode, even though the bitrate is now in line with the other options. Perhaps it's just the nature of the VCE encoder and nothing can be done about it. I'll spend some time investigating the behavior of VCE encoding in Steam, as well as using the OpenEncodeVFW library with Afterburner.

All that said, it's a huge improvement over the previous release. Thanks for the frequent streaming updates!
Ultima modifica da Martelol; 8 set 2014, ore 22:10
I agree its an improvment and d3d9 games seem to work now too, but framerate does seem to be an issue on my setup. Tried watching a game in CS GO. With software encode framerate is always 60fps. Hardware encode I average 43fps.

Host:
intel i7 3770k@4.5ghz
Radeon 7950
16GB ram
win8.1 x64

Client:
AMD A10 7850k
8GB ram
Linux Mint 17 fglrx drivers

Gb ethernet on both ends

short logs
[2014-09-09 01:15:00] Game: Counter-Strike: Global Offensive (730)
[2014-09-09 01:15:00] Recording on device: Speakers (Creative SB X-Fi)
[2014-09-09 01:15:00] Audio client mix format:
[2014-09-09 01:15:00] format: 65534
[2014-09-09 01:15:00] channels: 2
[2014-09-09 01:15:00] samples/sec: 48000
[2014-09-09 01:15:00] bytes/sec: 384000
[2014-09-09 01:15:00] alignment: 8
[2014-09-09 01:15:00] bits/sample: 32
[2014-09-09 01:15:00] channel mask: 0x3
[2014-09-09 01:15:00] data format: {00000003-0000-0010-8000-00AA00389B71}
[2014-09-09 01:15:00] Initializing audio with 2 channels and 48000 samples/sec
[2014-09-09 01:15:01] >>> Capture method set to Desktop DWM NV12 + libx264 main (4 threads)
[2014-09-09 01:15:01] >>> Capture resolution set to 1920x1080
[2014-09-09 01:15:01] >>> Client video decoder set to libavcodec software decoding with 4 threads
[2014-09-09 01:15:02] >>> Capture method set to Game D3D9 RGB + libyuv + libx264 main (4 threads)
[2014-09-09 01:22:47] "SessionStats"
{
"GameNameID" "Counter-Strike: Global Offensive"
"TimeSubmitted" "1410240167"
"ResolutionX" "1920"
"ResolutionY" "1080"
"CaptureDescriptionID" "Game D3D9 RGB + libyuv + libx264 main (4 threads)"
"DecoderDescriptionID" "libavcodec software decoding with 4 threads"
"BandwidthLimit" "15000"
"FramerateLimit" "0"
"SlowGamePercent" "0"
"SlowCapturePercent" "0"
"SlowConvertPercent" "0"
"SlowEncodePercent" "0"
"SlowNetworkPercent" "0"
"SlowDecodePercent" "0"
"SlowDisplayPercent" "0"
"AvgClientBitrate" "72.7791748046875"
"StdDevClientBitrate" "23.058309555053711"
"AvgServerBitrate" "14553.6220703125"
"StdDevServerBitrate" "26644.986328125"
"AvgLinkBandwidth" "290622.875"
"AvgPingMS" "0.57312953472137451"
"StdDevPingMS" "0.20458951592445374"
"AvgCaptureMS" "6.2442483901977539"
"StdDevCaptureMS" "0.83175867795944214"
"AvgConvertMS" "1.4912995100021362"
"StdDevConvertMS" "0.05986197292804718"
"AvgEncodeMS" "6.9141321182250977"
"StdDevEncodeMS" "1.1608173847198486"
"AvgNetworkMS" "-2.1457023620605469"
"StdDevNetworkMS" "0.45292797684669495"
"AvgDecodeMS" "5.9746584892272949"
"StdDevDecodeMS" "1.5110694169998169"
"AvgDisplayMS" "6.2107362747192383"
"StdDevDisplayMS" "4.8366074562072754"
"AvgFrameMS" "25.579069137573242"
"StdDevFrameMS" "5.4874711036682129"
"AvgFPS" "60.795387268066406"
"StdDevFPS" "8.7584896087646484"
"BigPicture" "0"
"KeyboardMouseInput" "1"
"GameControllerInput" "0"
"SteamControllerInput" "0"
}


[2014-09-09 01:03:42] Game: Counter-Strike: Global Offensive (730)
[2014-09-09 01:03:42] Recording on device: Speakers (Creative SB X-Fi)
[2014-09-09 01:03:42] Audio client mix format:
[2014-09-09 01:03:42] format: 65534
[2014-09-09 01:03:42] channels: 2
[2014-09-09 01:03:42] samples/sec: 48000
[2014-09-09 01:03:42] bytes/sec: 384000
[2014-09-09 01:03:42] alignment: 8
[2014-09-09 01:03:42] bits/sample: 32
[2014-09-09 01:03:42] channel mask: 0x3
[2014-09-09 01:03:42] data format: {00000003-0000-0010-8000-00AA00389B71}
[2014-09-09 01:03:42] Initializing audio with 2 channels and 48000 samples/sec
[2014-09-09 01:03:43] >>> Capture method set to Game D3D9 + AMF H264
[2014-09-09 01:07:32] "SessionStats"
{
"GameNameID" "Counter-Strike: Global Offensive"
"TimeSubmitted" "1410239252"
"ResolutionX" "1920"
"ResolutionY" "1080"
"CaptureDescriptionID" "Game D3D9 + AMF H264"
"DecoderDescriptionID" "libavcodec software decoding with 4 threads"
"BandwidthLimit" "15000"
"FramerateLimit" "0"
"SlowGamePercent" "0"
"SlowCapturePercent" "0"
"SlowConvertPercent" "0"
"SlowEncodePercent" "0"
"SlowNetworkPercent" "0"
"SlowDecodePercent" "0"
"SlowDisplayPercent" "0"
"AvgClientBitrate" "59.347404479980469"
"StdDevClientBitrate" "14.494227409362793"
"AvgServerBitrate" "10395.162109375"
"StdDevServerBitrate" "0"
"AvgLinkBandwidth" "780925.4375"
"AvgPingMS" "0.34559810161590576"
"StdDevPingMS" "0.11648930609226227"
"AvgCaptureMS" "6.5619401931762695"
"StdDevCaptureMS" "0.92332613468170166"
"AvgConvertMS" "0"
"StdDevConvertMS" "0"
"AvgEncodeMS" "6.5620083808898926"
"StdDevEncodeMS" "0.92329412698745728"
"AvgNetworkMS" "0.27432402968406677"
"StdDevNetworkMS" "0.077465474605560303"
"AvgDecodeMS" "7.002601146697998"
"StdDevDecodeMS" "1.9532315731048584"
"AvgDisplayMS" "-5418.91650390625"
"StdDevDisplayMS" "150991.375"
"AvgFrameMS" "24.034692764282227"
"StdDevFrameMS" "10.195894241333008"
"AvgFPS" "43.864139556884766"
"StdDevFPS" "11.316518783569336"
"BigPicture" "0"
"KeyboardMouseInput" "1"
"GameControllerInput" "0"
"SteamControllerInput" "0"
}
Ultima modifica da slouken; 9 set 2014, ore 9:10
< >
Visualizzazione di 1-15 commenti su 35
Per pagina: 1530 50

Tutte le discussioni > General Discussion > Dettagli della discussione
Data di pubblicazione: 3 set 2014, ore 18:26
Messaggi: 35