我想在我的 iOS 应用程序中播放 youtube 视频。我搜索了那个,但我找到的唯一解决方案是在 iOS 应用程序中嵌入 youtube 视频,视频在 webview 中播放,这样我们就可以滚动并播放建议的其他视频。 我不想在 webview 中播放视频,我想像在播放器中播放一样播放视频,用户无法滚动它。 在 Swift 中是否有任何解决方案,而且我不想使用违反 Youtube
条款和条件的库如果您不想使用 YouTube 提供的 API,而是继续使用
UIWebView
.,这是另一个解决方案
YouTube 具有使用
https://www.youtube.com/embed/<videoId>
. 格式的 URL 在 web 视图中全屏加载任何视频的功能,而无需任何滚动功能
例如,要使用此方法加载 Gangnam Style,只需将 UIWebView 指向 URL https://www.youtube.com/embed/9bZkp7q19f0.
YouTube 提供的用于在 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
是在视频的URL中找到的字符串id,比如"9bZkp7q19f0"
.
Github 上也有在应用程序中播放 Youtube 视频的解决方案。
喜欢这个:https://github.com/rinov/YoutubeKit
或者这个:https://github.com/gilesvangruisen/Swift-YouTube-Player
只需为您要使用的项目添加 pod,在终端中安装 pod,您就可以使用该项目中的功能。
希望对您有所帮助。
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)
}
}
}
我已经创建了一个扩展程序来制作
UIWebView
中的 Youtube 视频。通过使用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
*/