YTLiveStreaming is an iOS framework which can be used for creating live broadcasts and video streams on YouTube using YouTube Live Streaming API (YouTube Data API v3)
- Xcode 11+
- Swift 5.0
-
First of all enable YouTube LIVE on your account.
-
Go to your Google account https://console.developers.google.com
-
Create a new application.
-
Go to the new application
-
Select Library
-
Select "YouTube Data API v3"
-
Select Credetials
-
Create Api key (API_KEY) ; In Key restriction select iOS, enter your iOS app bundle id; Save
-
Create Oauth 2.0 Cient ID (CLIENT_ID)
-
add three scopes for Google APIs: "https://www.googleapis.com/auth/youtube", "https://www.googleapis.com/auth/youtube.readonly", "https://www.googleapis.com/auth/youtube.force-ssl"
-
fill Application Homepage link and Application Privacy Policy link. Submit for verification
-
as result you will have API_KEY and CLIENT_ID which will be used in info.plist your iOS app later.
CocoaPods is a dependency manager for Cocoa projects. You can install it with the following command:
$ gem install cocoapods
CocoaPods 1.1.0+ is required to build YTLiveStreaming
To integrate YTLiveStreaming into your Xcode project using CocoaPods, specify it in your Podfile
:
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '10.0'
use_frameworks!
target '<Your Target Name>' do
pod 'YTLiveStreaming'
end
Then, run the following command:
$ pod install
As an example used iOS app Live Events
-
Download or clone the repository.
-
Select Sample folder
-
Launch
pod install
-
Open LiveEvents.xcworkspace.
-
Change current bundle id on your
-
Create Config.plist. Copy content Config.plist.example.plist into new Config.plist. Change current values of the client ID and API key on yours.
-
Put CLIENT_ID and API_KEY into the plist.info:
- In Sample/Info.plist edit the CFBundleURLSchemes. Change the value that starts with "com.googleusercontent.apps." based on your API key. It should be set to the reversed API key. The API key has the format XXXXXXXX.apps.googleusercontent.com and the allowed URL should be com.googleusercontent.apps.XXXXXXXX
import YTLiveStreaming
...
let input: YTLiveStreaming = YTLiveStreaming
...
// Get all events in different arrays of the LiveBroadcastStreamModel type
input.getAllBroadcasts(){ (upcomingEvents, liveNowEvents, completedEvents) in
...
}
// Get events separately:
// Get Ready to broadcast events
input.getUpcomingBroadcasts() { result in
switch result {
case .success(let upcomingEvents):
...
case .failure(let error):
...
}
}
// Get Live now broadcasts
input.getLiveNowBroadcasts() ( result in
switch result {
case .success(let liveNowEvents):
...
case .failure(let error):
...
}
}
// Get Completed broadcasts
input.getCompletedBroadcasts() ( result in
switch result {
case .success(let completedEvents):
...
case .failure(let error):
...
}
}
// Create Broadcast
input.createBroadcast(title, description: description, startTime: startDate, completion: { liveBroadcast in
if let liveBroadcast = liveBroadcast {
...
}
})
// Update of the existing broadcast: LiveBroadcastStreamModel
input.updateBroadcast(broadcast, completion: { success in
if success {
...
}
})
// Start broadcast streaming video
input.startBroadcast(broadcast, delegate: self, completion: { streamName, streamUrl, _ in
if let streamName = streamName, let streamUrl = streamUrl {
completion(streamUrl, streamName)
}
})
// Finish broadcast streaming video
input.completeBroadcast(broadcast, completion: { success in
if success {
...
}
})
// Delete broadcast video from YouTube
input.deleteBroadcast(id: broadcastId, completion: { success in
if success {
...
}
})
And some other public methods of the YTLiveStreaming class
- GoogleSignIn
- LFLiveKit (https://github.com/LaiFengiOS/LFLiveKit)
- Alamofire
- SwiftyJSON
- Moya
Note. Here were used the following things:
- Goggle Sign-In for iOS ( https://developers.google.com/identity/sign-in/ios/ )
- VIPER architect (Clean for iOS) ( https://www.objc.io/issues/13-architecture/viper/ )
- Moya 10
- Alamofire
- RxSwift
- Podspec ( https://guides.cocoapods.org/syntax/podspec.html )
- Swiftlint
- Xcode unit tests
- Objective-C + Swift code example
- SwiftUI in the sample project
Author Serhii Krotkykh
The project was created 11-11-2016
Changes history: 29-04-2020
- build 0.2.17
- Sample app was redesigned
- GoogleSignIn (used in the Sample app): up to 5.0.2 15-03-2021
- added Swiftlint
- fixed Swiftlint warnings
- Sample app was renamed to LiveEvents 04-05-2021
- added youtube-ios-player-helper as an video player
- added Xcode unit test 18-05-2021
- added SwuftUI based content view for the YouTube video player