I'll apologize for bumping this in advance...
Conditions under which QSVHelper.exe dies:
Running for 2hours+ which correlates with roughly 10GB of data.
Running where the output rate exceeds 100Mbits for extended amounts of time. I'm not sure the exact point it did it, but bright scenery in FFXIV will send the bitrate into the 70's with ICQQuality at 21 and using ICQ Rate control. Normally one wouldn't even override QSV, but it's CBR is awful.
Something I want to point out however... for whatever reason, OBS is using an older version of QSVhelper.exe (32bit) even with the 64bit OBS. If I download the source, compile QSVHelper as 64bit, it exhibits the same problem, however I'll note this warnings:
Warning 2 warning C4267: '=' : conversion from 'size_t' to 'mfxU16', possible loss of data \OBS-master\QSVHelper\QSVStuff.cpp 182 1 QSVHelper
Warning 3 warning C4267: 'initializing' : conversion from 'size_t' to 'unsigned int', possible loss of data \OBS-master\QSVHelper\QSVStuff.cpp 189 1 QSVHelper
Warning 4 warning C4267: '=' : conversion from 'size_t' to 'mfxU16', possible loss of data \OBS-master\QSVHelper\QSVStuff.cpp 217 1 QSVHelper
Warning 5 warning C4267: '=' : conversion from 'size_t' to 'mfxU16', possible loss of data \OBS-master\QSVHelper\QSVStuff.cpp 226 1 QSVHelper
Warning 6 warning C4267: '=' : conversion from 'size_t' to 'uint16_t', possible loss of data \obs-master\obs-master\qsvhelper\Encoder.h 273 1 QSVHelper
Warning 7 warning C4267: '=' : conversion from 'size_t' to 'uint16_t', possible loss of data \obs-master\qsvhelper\Encoder.h 274 1 QSVHelper
Warning 8 warning C4267: 'argument' : conversion from 'size_t' to 'mfxU16', possible loss of data \obs-master\qsvhelper\Encoder.h 290 1 QSVHelper
Warning 9 warning C4267: '=' : conversion from 'size_t' to 'int32_t', possible loss of data \obs-master\qsvhelper\Encoder.h 324 1 QSVHelper
Warning 10 warning C4267: 'initializing' : conversion from 'size_t' to 'uint32_t', possible loss of data C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\utility 157 1 QSVHelper
Note the third, and the last two warnings are cast warnings from size_t to int32_t. This means a 64-bit number (on a 64bit system) would "roll over"
So my best guesses, based on what I've been able to reliably crash QSVHelper.exe with are numbers that have been over-run some internal counter. Because I've been able to have it crash at 16 minutes when the data rates end up at 120Mbits.
But, as for what actually sends the "killed" to OBS:
void ProcessEncodedFrame(List<DataPacket> &packets, List<PacketType> &packetTypes, DWORD outputTimestamp, DWORD &out_pts, mfxU32 wait=0)
{
if (!filled_bitstream_waiter.wait_for(2, wait))
{
if (wait <= 0)
return;
TerminateProcess(qsvhelper_process, (UINT)-1);
AppWarning(L"Terminating QSVHelper.exe after timeout");
helper_killed = true;
return;
}
...
Is OBS itself. It looks like it does it if there's 2 seconds without any data. Such is the case if your stream fades in and out when not CBR.
As for how to fix any of this. I'm not really much of a C++ developer, I'm basically speculating, and OBS doing this doesn't reliably create any crash dumps unless OBS locks up.
Related, but unrelated.
DirectX11. I was using NVenc before QSV, because it worked just fine in DX9, but when I switched to DX11, NVenc just kept sending blank frames, so I'd go for like half an hour thinking it's been streaming a 8Mbit stream, but then when I pull the video it's been sending empty frames for most of that time. So that's why I switched to QSV, but it produced awful realtime CBR, so I had another computer do the bitrate reduction. But, good gawd the amount of times QSV crashes makes me question if it's even worth the effort if I lose 25% of the the stuff I've recorded randomly between 15 minutes and 2 hours. I lost enough already with the NVenc.
Anyhow, two of the hangs related show "Cross-thread" in the Windows log, but it doesn't appear mean anything since those were user-initiated closing OBS due to the stream being told to stop, and not responding.