Use production studio mode
The code on this page works with either the default UI or the custom UI.
Production Studio (PS) mode lets an authorized client publish custom raw video and audio into the Zoom meeting pipeline through the SDK's PSSender, instead of - or in addition to - a normal camera or mic path.
On iOS, the SDK only provides observer support. Your app can query production studio state and receive production studio status callbacks, but cannot start production studio mode or push media. Starting and sending must be done from a macOS or Windows host.
Get PS mode APIs
Production studio APIs are available directly on MobileRTCMeetingService. There is no separate PS controller object on iOS.
import MobileRTC
let ms = MobileRTC.shared().getMeetingService()
#import <MobileRTC/MobileRTC.h>
MobileRTCMeetingService *ms = [[MobileRTC sharedRTC] getMeetingService];
Callbacks
Register a delegate that conforms to MobileRTCMeetingServiceDelegate to receive PS events.
onPSUserStatusChanged:isStart:
This fires when a PS user in the meeting starts or stops publishing.
userId- the PS participant's user ID.isStart YES- that user began PS sending. NOmeans that they stopped.- Use for updating UI like showing a "Live" indicator, or correlating with the roster.
func onPSUserStatusChanged(_ userId: UInt, isStart: Bool) {
if isStart {
// userId is now publishing via PS
} else {
// userId stopped PS publishing
}
}
- (void)onPSUserStatusChanged:(NSUInteger)userId isStart:(BOOL)isStart
{
if (isStart) {
// userId is now publishing via PS
} else {
// userId stopped PS publishing
}
}
Use the participant identity
isProductionStudioUser on MobileRTCMeetingUserInfo indicates whether a roster participant is a PS user. Use it for UI labeling or debugging.
Get user information via MobileRTCMeetingService+User.
import MobileRTC
let ms = MobileRTC.shared().getMeetingService()
if let userInfo = ms?.userInfo(byID: userId) {
let isPS = userInfo.isProductionStudioUser
}
#import <MobileRTC/MobileRTC.h>
MobileRTCMeetingService *ms = [[MobileRTC sharedRTC] getMeetingService];
MobileRTCMeetingUserInfo *userInfo = [ms userInfoByID:userId];
if (userInfo) {
BOOL isPS = userInfo.isProductionStudioUser;
}