# 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. ```swift import MobileRTC let ms = MobileRTC.shared().getMeetingService() ``` ```objectivec #import 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. ```swift func onPSUserStatusChanged(_ userId: UInt, isStart: Bool) { if isStart { // userId is now publishing via PS } else { // userId stopped PS publishing } } ``` ```objectivec - (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`. ```swift import MobileRTC let ms = MobileRTC.shared().getMeetingService() if let userInfo = ms?.userInfo(byID: userId) { let isPS = userInfo.isProductionStudioUser } ``` ```objectivec #import MobileRTCMeetingService *ms = [[MobileRTC sharedRTC] getMeetingService]; MobileRTCMeetingUserInfo *userInfo = [ms userInfoByID:userId]; if (userInfo) { BOOL isPS = userInfo.isProductionStudioUser; } ``` ---