iOS 360-degree video player streaming from an AVPlayer
Swifty360Player
iOS 360-degree video player streaming from an AVPlayer.
Demo
Requirements
Swifty360Player Version | Minimum iOS Target | Swift Version |
---|---|---|
0.2.5 | 11.0 | 5.x |
0.2.2 | 11.0 | 4.2 |
0.2.1 | 10.0 | 4.1 |
0.2 | 10.0 | 4.0 |
CocoaPods
CocoaPods is a dependency manager for Cocoa projects. You can install it with the following command:
$ gem install cocoapods
To integrate Swifty360Player into your Xcode project using CocoaPods, specify it in your Podfile:
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '11.0'
use_frameworks!
target '<Your Target Name>' do
pod 'Swifty360Player', '0.2.5'
end
Then, run the following command:
$ pod install
Carthage
Carthage is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks.
You can install Carthage with Homebrew using the following command:
brew update
brew install carthage
To integrate Swifty360Player into your Xcode project using Carthage, specify it in your Cartfile:
github "abdullahselek/Swifty360Player" ~> 0.2.5
Run carthage update to build the framework and drag the built Swifty360Player.framework into your Xcode project.
Swift Package Manager
Modify your Package.swift file to include the following dependency:
.package(url: "https://github.com/abdullahselek/Swifty360Player.git", from: "0.2.5")
Run swift package resolve
XCFramework
XCFrameworks require Xcode 11 or later and integration is very similar to integration of .framework format. Please use script scripts/build-framework.sh to generate binary Swifty360Player.xcframework archive that you can use as a dependency in Xcode.
Swifty360Player.xcframework is a Release (Optimized) binary that offer best available Swift code performance.
Example Usage
You just need an AVPlayer
instance created with a valid video url and a Swifty360MotionManager
instance. You can use these code snippets in a UIViewController
instance.
Video url can be either local or remote.
let videoURL = URL(fileURLWithPath: Bundle.main.path(forResource: "google-help-vr", ofType: "mp4")!)
let player = AVPlayer(url: videoURL)
let motionManager = Swifty360MotionManager.shared
swifty360ViewController = Swifty360ViewController(withAVPlayer: player, motionManager: motionManager)
addChildViewController(swifty360ViewController)
view.addSubview(swifty360ViewController.view)
swifty360ViewController.didMove(toParentViewController: self)
player.play()
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(reorientVerticalCameraAngle))
view.addGestureRecognizer(tapGestureRecognizer)
Tap Gesture Handler
@objc func reorientVerticalCameraAngle() {
swifty360ViewController.reorientVerticalCameraAngleToHorizon(animated: true)
}
Using storyboard and Swifty360ViewController
as parent class
guard let swifty360ViewController = self.storyboard?.instantiateViewController(withIdentifier: "TestViewController") as? TestViewController else {
return
}
let videoURL = URL(fileURLWithPath: Bundle.main.path(forResource: "google-help-vr", ofType: "mp4")!)
let player = AVPlayer(url: videoURL)
let motionManager = Swifty360MotionManager.shared
swifty360ViewController.player = player
swifty360ViewController.motionManager = motionManager
self.present(swifty360ViewController, animated: true, completion: nil)
import UIKit
import Swifty360Player
class TestViewController: Swifty360ViewController {
override func viewDidLoad() {
super.viewDidLoad()
player.play()
}
}
Example use of Swifty360View
with using code commands
let videoURL = URL(fileURLWithPath: Bundle.main.path(forResource: "google-help-vr", ofType: "mp4")!)
let player = AVPlayer(url: videoURL)
let motionManager = Swifty360MotionManager.shared
let swifty360View = Swifty360View(withFrame: view.bounds,
player: player,
motionManager: motionManager)
swifty360View.setup(player: player, motionManager: motionManager)
view.addSubview(swifty360View)
player.play()
Using Swifty360View
with Storyboard
- Add a
UIView
to your viewcontroller and change it's class asSwifty360View
- Connect via IBOutlets
and
let videoURL = URL(fileURLWithPath: Bundle.main.path(forResource: "google-help-vr", ofType: "mp4")!)
let player = AVPlayer(url: videoURL)
let motionManager = Swifty360MotionManager.shared
swifty360View.setup(player: player, motionManager: motionManager)
player.play()
Tap gesture recognizers for Swifty360View
, create one recognizer for your viewcontroller's view
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(reorientVerticalCameraAngle))
view.addGestureRecognizer(tapGestureRecognizer)
and selector function
@objc func reorientVerticalCameraAngle() {
swifty360View.reorientVerticalCameraAngleToHorizon(animated: true)
}
License
Swifty360Player is released under the MIT license. See LICENSE for details.