Wowza Community

NVidia NVENC quality question

Hi!,

We tested NVENC on GTX 1060 and the bitrate for the same quality is about double in compare to CPU based transcoding. Is there some difference in encoding quality between GeForce and Tesla/Quadro cards? Or they both use the same engine with exactly the same drivers and results?

From the point of GeForce NVEnc appears to be completely useless for both H264 and H265 or are we missing something? (why would you want to double bitrate for the same video quality?).

Thanks!
Atmapuri

There is no difference in quality between different Nvidia cards. The only difference is that consumer grade cards are limited by Nvidia to receive and convert a maximum of two live streams whereas the professional grade cards can handle more. We have more information on Nvidia NVENC in the article below.

https://www.wowza.com/docs/server-specifications-for-nvidia-nvenc-and-nvidia-cuda-acceleration-with-wowza-transcoder

Note that GPU accelerated encoding is inherently inefficient as the GPU uses it’s own codec (Nvidia NVENC also known as h264_nvenc) and requires substantially more data than other codecs to achieve the same quality. For additional information regarding bitrate please reference the Overall Conclusion section in the article below.

http://www.compression.ru/video/codec_comparison/h264_2012/

Dear Kevin, OK, so NVidia is not suitable for internet streaming. What about Intel Quick Sync? Is this something that is supported by Wowza and would deliver video quality comparable to CPU based processing? Thanks!

Is that the valid conclusion? That GPU encoding should be considered unusable? In https://www.wowza.com/docs/How-to-set-up-and-run-Wowza-Transcoder-for-live-streaming, it says, “The Transcoder can be configured to take advantage of hardware acceleration on 64-bit Windows and Linux operating systems, which is recommended but not required.” Half the CPU encoding quality would take it down to MPEG2 levels of efficiency.

In our case, we’re using a Tesla M60 card, with the default presets on a Transrate using the live application. Input is an 8 Mbps SD stream. Output provides 360p @ 850 kbps, and 240p @ 350 kbps. With the MainConcept, CPU encoder, the result looks okay. With NVENC, it’s completely unusable. The video is breathing and pixelating. Do I need to double the bandwidth? Or something else? Is there a set of recommended Nvidia presets?

I’m surprised by Kevin’s post … if I’m understanding properly, Nvidia Cuda is not suitable for good quality transcoding … in that case, what would be Wowza suggestion for offloading transcoding processes and get a good quality to be able to scale as a transcoder in a server CPU can’t process too much

We are seeing heavy pulsing in content coded using the GPU, but not via the CPU. But it’s not completely consistent. Confusing, so far.

The details of a given H.264 codec’s efficiency can be found over at Moscow State University Video Quality Metric Tool website.

http://www.compression.ru/video/codec_comparison/h264_2012/

I’m having this same problem in NVENC… did you guys ever solve it?

You should use NVCUVID for decoding.
You should use CUDA for scaling.
You should use NVENC for encoding.

Seeing SKIP1FRAME, SKIP2FRAME, SKIP4FRAME, KEYFRAMESONLY, or ALLFRAMESOFF in your signals that transcoder is overloaded and is skipping frames in an attempt to keep up with your live feed. This will affect playback of segmented content which may cause your clients to buffer or even disconnect from the live stream. This can fill the java heap rapidly which if that happens will cause Wowza Streaming Engine to restart.

Please run the following command which will show everything that your Nvidia card is doing.
nvidia-smi -i 0 -q

The line above will look at the first card only. If you have more than one Nvidia card you can change the zero to one and see the next card.

You should see a section that looks as follows:

Utilization
Gpu : 46 %
Memory : 27 %
Encoder : 0 %
Decoder : 0 %
Encoder Stats
Active Sessions : 0

If you have more than one GPU you should load balance them as shown in the article below.
https://www.wowza.com/docs/how-to-load-balance-nvidia-cuda-accelerated-transcoding-across-gpus

The article below shows the list of Nvidia cards that support video encoding and decoding. Nvidia restricts two outgoing video streams at the driver level for their GTX and RTX consumer grade video cards. We do not provide support for consumer grade GPUs.
https://developer.nvidia.com/video-encode-decode-gpu-support-matrix

Note that the cards in the Kepler family are from 2012. Cards in the Maxwell family are from 2014. Cards in the Pascal family are from 2016. Cards in the Volta family are from 2017. Cards in the Turing family were released in September 2018.

NVIDIA GRID cards are generally used in virtualized environments so that resources can be shared across servers. Tesla cards are high performing for video decoding and encoding. Quadro cards are the low end of the Nvidia cards for decoding and encoding.

Our Transcoder benchmarks use older Quadro cards in the Maxwell family. This should give you an idea of what to expect.

https://www.wowza.com/docs/wowza-transcoder-performance-benchmark

Dear Kevin,

Thank you for your answer. However it did not touch the subject of the question, which is that the bitrate required for NVidia transcoded video needs to be 2x that of CPU transcoded video to match the quality.

The whole purpose of the speed and processing capacity is completely mute, if the quality is not a match or better.

Thanks!
Atmapuri

Does not answer the question.