Once the recording has started, set up a ZoomSDKRenderer , set your ZoomSDKRendererDelegate as the delegate property, and subscribe to the user via the subscribe method.
I found out the issue was with the userID passed to subscribe. I had used onHostChange to assign _activeUser but onHostChanged was not called while my code was running. I switched to using onActiveVideoUserChanged which was called, giving a valid userID and the code worked.
It looks like you were able to figure out the correct way of getting the ID of the active speaker each time it changes. That callback seems like it will do the trick for you if you are looking to subscribe to whomever is the active speaker at a given time. However, if you want to be able to subscribe to each individual user’s video stream as soon as it is available, you can use the onVideoStatusChange callback to ensure you have an accurate list of userIDs for all participants with video turned on.