Screen Share - iOS
Follow the below listed steps to add the screensharing capability in your iOS App.
Create Broadcast Upload Extension in iOS​
Step 1 : Open Target​
Open your project with xcode, the select File > New > Target in menu bar.
Step 2 : Select Target​
Select Broadcast Upload Extension and click next.
Step 3 : Configure Broadcast Upload Extension​
Enter the extension's name in the Product Name field, choose the team from the dropdown, uncheck the "Include UI extension" field, and click "Finish."
Step 4 : Activate Extension scheme​
You will be prompted with a popup : Activate "Your-Extension-name" scheme?, click on activate.
Now, the "Broadcast" folder will appear in the Xcode left side bar.
Step 5 : Add External file in Created Extension​
Open the videosdk-rtc-ios-sdk-example repository, and copy the following files: SampleUploader.swift
, SocketConnection.swift
, DarwinNotificationCenter.swift
, and Atomic.swift
to your extension's folder. Ensure that these files are added to the target.
Step 6 : Update SampleHandler.swift
file​
Open SampleHandler.swift, and copy the content of the file. Paste this content into your extension's SampleHandler.swift file.
Step 7 : Add Capability in App​
In Xcode, navigate to YourappName > Signing & Capabilities, and click on +Capability to configure the app group.
Choose App Groups from the list.
After that, select or add the generated App Group ID that you have created before.
Step 8 : Add Capability in Extension​
Go to Your-Extension-Name > Signing & Capabilities and configure App Group functionality which we had perform in previous steps. (Group id should be same for both targets).
Step 9 : Add App Group Id in Extension File​
Go to the extension's SampleHandler.swift
file and paste your group ID in the appGroupIdentifier
constant.
Step 10 : Update App level info.plist file​
- Add a new key RTCScreenSharingExtension in Info.plist with the extension's Bundle Identifier as the value.
- Add a new key RTCAppGroupIdentifier in Info.plist with the extension's App groups Id as the value.
Note : For the extension's Bundle Identifier, go to TARGETS > Your-Extension-Name > Signing & Capabilities .
You can also check out the extension's example code on github.
Integrate ScreenShare in your App​
After successfully creating Broadcast Upload Extension using the above listed steps, we can start using the enableScreenShare
and disableScreenShare
functions of the Meeting
class.
How to use the ScreenShare functions​
- Swift
@IBAction func ScreenShareButtonTapped(_ sender: Any) {
Task {
self.meeting?.enableScreenShare()
}
}
@IBAction func StopScreenShareButtonTapped(_ sender: Any) {
Task {
self.meeting?.disableScreenShare()
}
}
The function enableScreenShare
and disableScreenShare
are async functions; therefore use above syntax to call the screenshare functions.
Calling the enableScreenShare()
will prompt a RPBroadcastPickerView
with the extension that was created using the above steps.
After clicking the Start Broadcast button, you will be able to get the screen share stream in the session.
-
When the broadcast is started, it creates a Stream that has
MediaStream.kind = .share
. Using the stream kind, you can prompt a ScreenShare view for remote peer when ScreenShare is started by the local peer. -
Similarly, you can use the same kind to dismiss the screenshare view on the remote peer when the screenshare was stopped.
Example​
- Swift
extension MeetingViewController: ParticipantEventListener {
/// Participant has enabled mic, video or screenshare
/// - Parameters:
/// - stream: enabled stream object
/// - participant: participant object
func onStreamEnabled(_ stream: MediaStream, forParticipant participant: Participant) {
if stream.kind == .share {
// show screen share
showScreenSharingView(true)
screenSharingView.showMediastream(stream)
return
}
// show stream in cell
if let cell = self.cellForParticipant(participant) {
cell.updateView(forStream: stream, enabled: true)
}
if participant.isLocal {
// turn on controls for local participant
self.buttonControlsView.updateButtons(forStream: stream, enabled: true)
}
}
/// Participant has disabled mic, video or screenshare
/// - Parameters:
/// - stream: disabled stream object
/// - participant: participant object
func onStreamDisabled(_ stream: MediaStream, forParticipant participant: Participant) {
if stream.kind == .share {
// remove screen share
showScreenSharingView(false)
screenSharingView.hideMediastream(stream)
return
}
// hide stream in cell
if let cell = self.cellForParticipant(participant) {
cell.updateView(forStream: stream, enabled: false)
}
if participant.isLocal {
// turn off controls for local participant
self.buttonControlsView.updateButtons(forStream: stream, enabled: false)
}
}
}
API Reference​
The API references for all the methods and events utilised in this guide are provided below.
Got a Question? Ask us on discord