Skip to content

Instantly share code, notes, and snippets.

@tokorom
Last active June 22, 2021 06:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tokorom/d2fa3b599cac9a7d9e4c185f2d17565a to your computer and use it in GitHub Desktop.
Save tokorom/d2fa3b599cac9a7d9e4c185f2d17565a to your computer and use it in GitHub Desktop.
import AVKit
import GroupActivities
import UIKit
class ViewController: AVPlayerViewController {
private var groupSession: GroupSession<MovieWatchingActivity>?
override func viewDidLoad() {
super.viewDidLoad()
setupPlayer()
prepareSharePlay()
listenForGroupSession()
}
private func setupPlayer() {
guard player == nil, let movieURL = MovieWatchingActivity.movieURL else {
return
}
let player = AVPlayer(url: movieURL)
self.player = player
player.play()
}
private func prepareSharePlay() {
let activity = MovieWatchingActivity()
async {
switch await activity.prepareForActivation() {
case .activationDisabled:
break
case .activationPreferred:
activity.activate()
case .cancelled:
break
default: ()
}
}
}
private func listenForGroupSession() {
async {
for await session in MovieWatchingActivity.sessions() {
groupSession = session
player?.playbackCoordinator.coordinateWithSession(session)
session.join()
}
}
}
}
struct MovieWatchingActivity: GroupActivity {
static let movieURL: URL? = URL(string: "https://devstreaming-cdn.apple.com/videos/wwdc/2019/408bmshwds7eoqow1ud/408/hls_vod_mvp.m3u8")
static let activityIdentifier = "work.spinners.SharePlaySample.GroupWatching"
var metadata: GroupActivityMetadata {
var metadata = GroupActivityMetadata()
metadata.fallbackURL = Self.movieURL
metadata.previewImage = UIImage(named: "wwdc19")?.cgImage
metadata.title = "Sample"
metadata.subtitle = "WWDC19 Session Video"
return metadata
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment