Hi Steve,
Sorry that I thought you were fiddling with the console rather than inlining the change.
You will still be using videojs.ima.js. Go to onAdStarted_ (line 451), which signifies the beginning of ad playback. Here you can set the volume, by using this.adsManager.setVolume(0). The reason the console is saying "undefined" is probably the SDK isn't grabbing an instance of your adsManager under adsready (probably because it is still too early in the workflow).
Adjusting the player's UI controls as per the state of your ad is completely at the developer's level. What happens is, when you call setVolume(), the SDK will dispatch an internal event to change the volume of the ad, without the video player's knowledge. You can grab this event and change the UI of the control yourself. The only use case where video controls and SDK work in sync is when you change the volume directly from the control (i.e. the volume slider).
There is code in place that listens to the volume slider and adjusts the volume accordingly. When you programmatically mute the ad, clicking on the volume icon to turn it to a "mute" state creates a
duplicate setVolume(0), which has already been executed with your programmatic mute call. That explains why you need an additional click to unmute the ad, because at this time the same JS that listens to the volume slider will get called to unmute it.
Let me know if you have any questions,