Jump to content

Transcoding - HW Acceleration not working properly


iinthesky73

Recommended Posts

iinthesky73

Hi.. The upgrade sped a lot of things up. The performance upgrades are noticeable! However, i have noticed that with Hardware Acceleration on either Auto or with Advanced, Emby is NOT using my GPU anymore. 

 

Prior to the upgrade, when a video required transcoding I can see clearly using HWiNFO the GPU clocks immediate kicked up and the system CPU remained stable. Now, when I fire up that same videos that are transcoded while playing I see the system CPU jump to 90%+ and the GPU sits there doing nothing. 

 

It appears Emby is either not seeing my GPU any longer or the perhaps it's the changes in the libraries available.. I'm not sure at this point. Previously I used the 'experimental' AMD library... that is no longer an option.

 

I presently have an AMD Sapphire RX 570 8GB GPU in the system.

 

Can someone help me understand what's going on after the update? 

 

Thanks!

 

 

  • Like 1
Link to comment
Share on other sites

iinthesky73

Sure.. attached below.. It's worth noting of course with mpeg encoding (mp4 - 1080p) where there is no transcoding, defaulting to direct play.. system cpu is not disturbed much.. plays perfectly fine. Same behavior as before. With anything .avi or of lesser quality when transcoding kicks. I guess that's obvious at this point but I just wanted to be sure that is unchanged.

 

ffmpegTranscodeLog.txt

Link to comment
Share on other sites

iinthesky73

I have several AMD GPUs -- different Manuf. brands -- that I can try also. I doubt it would make a difference. That wouldn't make a lot of sense. It worked before the update. But just throwing that out there.

Link to comment
Share on other sites

Do you have a emby premiere account ? Correct me if I'm wrong, but I've read somewhere that now with version 4.0.0+ you need it to use hardware acceleration.

Link to comment
Share on other sites

Do you have a emby premiere account ? Correct me if I'm wrong, but I've read somewhere that now with version 4.0.0+ you need it to use hardware acceleration.

It's now a premiere option?

 

Well that sucks.

Link to comment
Share on other sites

iinthesky73

Do you have a emby premiere account ? Correct me if I'm wrong, but I've read somewhere that now with version 4.0.0+ you need it to use hardware acceleration.

 

Yes I also have the lifetime premiere.

Edited by iinthesky73
Link to comment
Share on other sites

@@iinthesky73

 

It seems you have connected your monitor to the onboard graphics instead of the GPU. That's why the AMD GPU is not detected.

 

But why not use the Intel QuickSync acceleration? This might even be more powerful than using the AMD. Just give it a try.

Link to comment
Share on other sites

iinthesky73

@@iinthesky73

 

It seems you have connected your monitor to the onboard graphics instead of the GPU. That's why the AMD GPU is not detected.

 

But why not use the Intel QuickSync acceleration? This might even be more powerful than using the AMD. Just give it a try.

 

Hi.. I don't have any monitor connected to that server at all. And no, there is absolutely no way that it's possible that any acceleration would work better utilizing my system's cpu alone vs. the GPU. It worked and the GPU was recognized and used in the previous version w/ the "experimental' AMD libraries. i don't think this is the answer.

 

As I stated originally.. the quicksync works great but ONE stream shoots my CPU to 90%+ utilization. If i fire up another stream or two, this cpu isn't going to handle that well. That's the whole point for the GPU! The Quicksync is another layer and it works great but I want it to work as it did before, interfacing with the GPU. 

Edited by iinthesky73
Link to comment
Share on other sites

Hi.. I don't have any monitor connected to that server at all. And no, there is absolutely no way that it's possible that any acceleration would work better utilizing my system's cpu alone vs. the GPU. It worked and the GPU was recognized and used in the previous version w/ the "experimental' AMD libraries. i don't think this is the answer.

 

As I stated originally.. the quicksync works great but ONE stream shoots my CPU to 90%+ utilization. If i fire up another stream or two, this cpu isn't going to handle that well. That's the whole point for the GPU! The Quicksync is another layer and it works great but I want it to work as it did before, interfacing with the GPU. 

 

In the ffmpeg log it was using CPU/software encoding, not QuickSync.

 

QuickSync is not using CPU. It is using a dedicated ASIC which is integrated in the CPU but does not require CPU processing.

 

In the previous version, things weren't handled as explicit as they are done now. You could have selected "AMF" and it could still have used DXVA acceleration utilizing the Intel graphics. 

Link to comment
Share on other sites

That's right, i forgot about that. Before, you'd select AMD, but it would actually use DXVA decoding instead. So we haven't taken that away. You can still use that if you want.

 

Does that clear things up?

Link to comment
Share on other sites

For the AMD GPU to be detected you need to have a monitor connected to it and you need to run Emby from a local session, then you will get the AMF encoder and additional DXVA decoders for AMD.

 

In a future update, we will have DX11VA (successor to DXVA2). This will allow you to use AMD decoding without having a monitor connected to it. (but the AMF encoder will still need a monitor)

Link to comment
Share on other sites

So - we're on the way to enable full headless operation for all hw accelerations, but it's a step-by-step process.

  • Like 2
Link to comment
Share on other sites

iinthesky73

For the AMD GPU to be detected you need to have a monitor connected to it and you need to run Emby from a local session, then you will get the AMF encoder and additional DXVA decoders for AMD.

 

In a future update, we will have DX11VA (successor to DXVA2). This will allow you to use AMD decoding without having a monitor connected to it. (but the AMF encoder will still need a monitor)

 

 

 

Got it.. ok then I will give this a shot. I have a spare monitor i can connect to it. Hopefully the full headless operation you mentioned will be done soon. 

 

As to the quicksync using an ASIC -- I didn't realize there was an ASIC for decoding in the CPU. All I know is when I fire up a video that required transcoding of any kind the cpu utilization spiked to near 100%. I had everything available enabled in respect to the transcoding options. I'll try the things that were recommended above and poke around in the BIOS to see what difference it makes if any and report back if anything useful happens.

 

Until then, the optimal setup for me (and probably a lot of other folks) is no monitor no keyboard standalone with everything recognized. 

Edited by iinthesky73
Link to comment
Share on other sites

Q-Droid

So - we're on the way to enable full headless operation for all hw accelerations, but it's a step-by-step process.

 

About headless operation for HW accel is this a dedicated GPU limitation? iGPUs do work in headless mode now, right?

Link to comment
Share on other sites

 

Got it.. ok then I will give this a shot. I have a spare monitor i can connect to it. Hopefully the full headless operation you mentioned will be done soon. 

 

As to the quicksync using an ASIC -- I didn't realize there was an ASIC for decoding in the CPU. All I know is when I fire up a video that required transcoding of any kind the cpu utilization spiked to near 100%. I had everything available enabled in respect to the transcoding options. I'll try the things that were recommended above and poke around in the BIOS to see what difference it makes if any and report back if anything useful happens.

 

 

When you see "libx264' as encoder in the ffmpeg command line, then it's software encoding done by the CPU.

 

When you see 'h264_qsv' as encoder in the ffmpeg command line, then it's QuickSync (the ASIC I mentioned).

 

BTW, the integrated graphics in Intel CPUs is also something separate from the actual CPU and not using CPU resources. 

Link to comment
Share on other sites

About headless operation for HW accel is this a dedicated GPU limitation? iGPUs do work in headless mode now, right?

 

No - and No. 

 

It's primarily a software issue. The typical use case is displaying video on the screen and this requires an OS specific API providing a context for this.

The easiest way for manufacturers was to build this around DirectX on Windows and DX9 is not able to provide such a context without having an actual DirectX-capable display available in the session where the application is running.

 

Then came DirectX 11 which removed this requirement, but that's not been too long ago and it simply takes a while until all components in the chain (manufacturer drivers >> hw acceleration apis >> ffmpeg implementation >> Emby ) are updated to take advantage of this opportunity.

 

An Exception for this is Nvidia, their API is following a different route and as such, Nvidia hardware is always usable in headless mode.

 

The DXVA2-successor 'DX11VA' will be available soon to be used from Emby.

 

 

 

For integrated GPUs, it's sometimes a hardware problem that comes on top of the above:

 

Some mainboards completely switch off the onboard graphics when there's no monitor connected on startup.

In those cases, either check bios settings or use a dummy monitor plug to have it enabled on startup.

Link to comment
Share on other sites

Q-Droid

No - and No. 

 

It's primarily a software issue. The typical use case is displaying video on the screen and this requires an OS specific API providing a context for this.

The easiest way for manufacturers was to build this around DirectX on Windows and DX9 is not able to provide such a context without having an actual DirectX-capable display available in the session where the application is running.

 

Then came DirectX 11 which removed this requirement, but that's not been too long ago and it simply takes a while until all components in the chain (manufacturer drivers >> hw acceleration apis >> ffmpeg implementation >> Emby ) are updated to take advantage of this opportunity.

 

An Exception for this is Nvidia, their API is following a different route and as such, Nvidia hardware is always usable in headless mode.

 

The DXVA2-successor 'DX11VA' will be available soon to be used from Emby.

 

 

 

For integrated GPUs, it's sometimes a hardware problem that comes on top of the above:

 

Some mainboards completely switch off the onboard graphics when there's no monitor connected on startup.

In those cases, either check bios settings or use a dummy monitor plug to have it enabled on startup.

 

Thanks for the thorough response. 

Link to comment
Share on other sites

iinthesky73

When you see "libx264' as encoder in the ffmpeg command line, then it's software encoding done by the CPU.

 

When you see 'h264_qsv' as encoder in the ffmpeg command line, then it's QuickSync (the ASIC I mentioned).

 

BTW, the integrated graphics in Intel CPUs is also something separate from the actual CPU and not using CPU resources. 

 

OK I did a little bit of experimentation. I connected a monitor to the GPU and I disabled the onboard display adapter and now emby recognizes my GPU. Just to clear up any potential confusion.. the gpu isn't 'integrated' per se. It's a card. 

 

Anyhow, Emby is now seeing the GPU and the transcoding all point to the card (presumably). This is what I see:

MPEG-2
DXVA2 Radeon RX 570 Series - MPEG-2
 
H.264 (AVC)
DXVA2 Radeon RX 570 Series - H.264 (AVC)
 
H.265 (HEVC)
DXVA2 Radeon RX 570 Series - H.265 (HEVC)
 
VC-1
DXVA2 Radeon RX 570 Series - VC-1
 
HOWEVER... the same problem persists. When Emby streams something that needs to be transcoded, it seems to ignore these settings and goes right back to using software (libx264 Software Encoder) and the CPU.. My RX570 sits there idle. So something is still not right here. 
 
I've attached all the logs and some snapshot pics of what happens.
 
The image named IdleState.jpg is with nothing playing.
The image named TranscodingState.jpg is Emby while transcoding a stream
The image named DirectPlay.jpg is Emby streaming direct 1080p, no trans.
 
I also attached a pic of the Transcoding configuration page
 
post-379429-0-36980600-1547705732_thumb.jpg
post-379429-0-76457500-1547705732_thumb.jpg
post-379429-0-05118300-1547705733_thumb.png
post-379429-0-91074700-1547705733_thumb.jpg
 
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...