我想在我的iOS应用中播放YouTube视频。我查找了相关信息,但找到的唯一解决方案是在iOS应用中嵌入YouTube视频,这样视频将在Web视图中播放。在其中,我们可以滚动并播放其他建议视频。 我不想在Web视图中播放视频,我希望像播放器一样播放视频,并且用户无法滚动它。 在Swift中是否有任何解决方案?同时,我不想使用违反YouTube条款和条件的库。
我想在我的iOS应用中播放YouTube视频。我查找了相关信息,但找到的唯一解决方案是在iOS应用中嵌入YouTube视频,这样视频将在Web视图中播放。在其中,我们可以滚动并播放其他建议视频。 我不想在Web视图中播放视频,我希望像播放器一样播放视频,并且用户无法滚动它。 在Swift中是否有任何解决方案?同时,我不想使用违反YouTube条款和条件的库。
如果您不想使用YouTube提供的API并希望继续使用UIWebView
,这里有另一个解决方案。
YouTube具有在Web视图中加载任何视频的全屏功能,而不需要使用格式为https://www.youtube.com/embed/<videoId>
的URL中的任何滚动特性。
例如,要使用此方法加载江南Style,请将UIWebView直接定向到以下URL:https://www.youtube.com/embed/9bZkp7q19f0。
youtube-ios-player-helper
而不是YouTube-Player-iOS-Helper
。如果你还感兴趣,我刚刚更新了我的另一个答案,提供了适用于我的步骤。 - AdamYouTube提供的在iOS应用中嵌入视频的API确实是用Objective-C编写的,但是在Swift中同样适用。
要通过CocoaPods安装库,请按照 CocoaPods 设置说明并将以下行添加到您的 Podfile 中:
pod ‘youtube-ios-player-helper’, ‘~> 0.1’
在运行 pod install
后,确保从现在开始在 Xcode 中使用 .xcworkspace
文件。
要导入 Pod,只需在 Swift 文件顶部使用以下导入语句:
import youtube_ios_player_helper
您可以按照以下方式创建YouTube播放器视图:
let playerView = YTPlayerView()
您可以像使用其他UIView一样将此视图包含在布局中。此外,它包括YouTube文档中列出的所有功能。例如,要加载和播放视频,请使用以下函数:
playerView.load(withVideoId: videoId);
其中videoId
是视频链接中的字符串ID,例如"9bZkp7q19f0"
。
if let range = strUrl.range(of: "=") {
let strIdentifier = strUrl.substring(from: range.upperBound)
let playerViewController = AVPlayerViewController()
self.present(playerViewController, animated: true, completion: nil)
XCDYouTubeClient.default().getVideoWithIdentifier(strIdentifier) {
[weak playerViewController] (video: XCDYouTubeVideo?, error: Error?) in
if let streamURLs = video?.streamURLs, let streamURL =
(streamURLs[XCDYouTubeVideoQualityHTTPLiveStreaming] ??
streamURLs[YouTubeVideoQuality.hd720] ??
streamURLs[YouTubeVideoQuality.medium360] ??
streamURLs[YouTubeVideoQuality.small240]) {
playerViewController?.player = AVPlayer(url: streamURL)
} else {
self.dismiss(animated: true, completion: nil)
}
}
}
我创建了一个扩展,使得Youtube视频可以在UIWebView
或WKWebView
中播放。使用了Adam的解决方案。
extension String {
/*
Below variable will convert youtube ID to embedded Youtube link.
*/
var youtubeVideoURL: String?{
let url = "https://www.youtube.com/embed/\(self)"
return url
}
/*
Here below variable return us Youtube ID from URL String.
e.g. if Youtube link = "https://youtu.be/-zD8M66aAA4" then we'll get YoutubeID = "-zD8M66aAA4"
*/
var youtubeID: String? {
let pattern = "((?<=(v|V)/)|(?<=be/)|(?<=(\\?|\\&)v=)|(?<=embed/)|(?<=shorts/))([\\w-]++)"
let regex = try? NSRegularExpression(pattern: pattern, options: .caseInsensitive)
let range = NSRange(location: 0, length: count)
guard let result = regex?.firstMatch(in: self, range: range) else {
return nil
}
return (self as NSString).substring(with: result.range)
}
}
let ytLink = "https://youtu.be/-zD8M66aAA4"
let videoUrl = ytLink.youtubeID?.youtubeVideoURL
print(videoUrl)
/*
Result:- https://www.youtube.com/embed/-zD8M66aAA4
*/
let urlRequest = URLRequest(url: videoUrl)
webView?.load(urlRequest)