How to embed a Youtube video into my app?
Solution 1
Xcode 8.2 • Swift 3.0.2
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var wv: UIWebView!
override func viewDidLoad() {
super.viewDidLoad()
loadYoutube(videoID: "oCm_lnoVf08")
}
func loadYoutube(videoID:String) {
guard
let youtubeURL = URL(string: "https://www.youtube.com/embed/\(videoID)")
else { return }
wv.loadRequest( URLRequest(url: youtubeURL) )
}
}
Xcode 7.3.1 • Swift 2.x
import UIKit
class ViewController: UIViewController {
// create an outlet for your webview
@IBOutlet weak var wv: UIWebView!
override func viewDidLoad() {
super.viewDidLoad()
// load your you tube video ID
loadYoutube(videoID: "oCm_lnoVf08")
}
func loadYoutube(videoID videoID:String) {
// create a custom youtubeURL with the video ID
guard
let youtubeURL = NSURL(string: "https://www.youtube.com/embed/\(videoID)")
else { return }
// load your web request
wv.loadRequest( NSURLRequest(URL: youtubeURL) )
}
}
Solution 2
Swift 3/4
You can play youtube video in AVPlayer with the help of XCDYouTubeKit.
Add
pod 'XCDYouTubeKit'
into your project and write a code as below
func playVideo() {
let playerViewController = AVPlayerViewController()
self.present(playerViewController, animated: true, completion: nil)
XCDYouTubeClient.default().getVideoWithIdentifier("KHIJmehK5OA") { (video: XCDYouTubeVideo?, error: Error?) in
if let streamURL = video?.streamURLs[XCDYouTubeVideoQuality.HD720.rawValue] {
playerViewController.player = AVPlayer(url: streamURL)
} else {
self.dismiss(animated: true, completion: nil)
}
}
}
you can change the quality of video by replacing XCDYouTubeVideoQuality.HD720.rawValue with medium360 or with Small240
Solution 3
Use YouTube-Player-iOS-Helper:
Step 1: add pod "youtube-ios-player-helper", "~> x.y.z"
to your Podfile, replace "x.y.z" with the latest version. and run pod install
.
Step 2: Implement this code:
import UIKit
import youtube_ios_player_helper
class ViewController: UIViewController, YTPlayerViewDelegate {
@IBOutlet weak var playerView: YTPlayerView!
override func viewDidLoad() {
super.viewDidLoad()
playerView.delegate = self
let playerVars = ["playsinline": 1] // 0: will play video in fullscreen
self.playerView.loadWithVideoId("youtubeId", playerVars: playerVars)
}
}
Note: Set the rel
key to 0
in your playerVars
dictionary if you don't want to show related video:
let playerVars = ["playsinline":1, "rel" : 0 ]
Solution 4
I did by using below code on Swift 4+ version
guard let url = URL(string: "<Your YuTube url>")
else{
return
}
let safariViewControllerObject = SFSafariViewController(url: url)
self.present(safariViewControllerObject, animated: true, completion: nil)
Note:- I have imported SafariServices lib
Solution 5
Play youtube video in Swift 4.1
Add Pod pod 'XCDYouTubeKit'
import XCDYouTubeKit in ViewController
func playYoutubeVideo(){
let strUrl = "https://www.youtube.com/watch?v=9m_K2Yg7wGQ"
if let range = strUrl.range(of: "=") {
let strIdentifier = strUrl.substring(from: range.upperBound)
print("Identifier:\(strIdentifier)")
let videoPlayerViewController =
XCDYouTubeVideoPlayerViewController(videoIdentifier: strIdentifier)
videoPlayerViewController.present(in: viewYTVideo)
videoPlayerViewController.moviePlayer.play()
}
}
![Admin](/assets/logo_square_200-5d0d61d6853298bd2a4fe063103715b4daf2819fc21225efa21dfb93e61952ea.png)
Admin
Updated on July 05, 2022Comments
-
Admin almost 2 years
I'm trying to create a video player for my Swift app, but I keep getting the error of 'unresolved identifier AVPlayerViewController'. What am I missing?
I'm a beginner at this, I may have to ask a few thousand times in layman's terms. I've been scouring the internet for perhaps a day now for a video for how to embed a Youtube video into my app, with no results. If you could point me over to a tutorial that would be awesome!
Thanks!
-
Gaurav Patel almost 8 yearsI want to open this link but my screen only white not display any download file
-
Leo Dabus almost 8 years@GauravPatel Just create a new project and add that code there. I have just tested it here and it works fine Xcode 7.3.1 (AppStore version)
-
ahitt6345 almost 7 yearsIm making sure i understand this correctly. You have to have a webview and call loadrequest on a NSURL request. right?
-
AbecedarioPoint almost 6 yearsi have embeded
YTPlayerView
but some video not playing. why this is happen any one know? -
AbecedarioPoint almost 6 years@LeoDabus i have used your webview code for playing youtube video. my url is
https://www.youtube.com/watch?v=_8aKKEjIO2g&feature=youtu.be
and when i load videoID_8aKKEjIO2g
it say thatThis video is unavailable
. why this happen do you know? -
Hemaolle over 5 yearsNote that XCDYouTubeKit readme (github.com/0xced/XCDYouTubeKit) says that "XCDYouTubeKit is against the YouTube Terms of Service. The only official way of playing a YouTube video inside an app is with a web view and the iframe player API."
-
Raymond over 4 yearsThis pod is too old and haven't been updated. It stops working and no clue why it doesn't work. Don't use this pod anymore.
-
Nassif over 2 yearsI have used the mentioned pod. is there an option to hide the context menu. Also there is inconsistency in player controls. Some times its shows the Quicktime player controls and mostly the general YouTube controls