在iOS应用中播放Youtube视频

12

我想在我的iOS应用中播放YouTube视频。我查找了相关信息,但找到的唯一解决方案是在iOS应用中嵌入YouTube视频,这样视频将在Web视图中播放。在其中,我们可以滚动并播放其他建议视频。 我不想在Web视图中播放视频,我希望像播放器一样播放视频,并且用户无法滚动它。 在Swift中是否有任何解决方案?同时,我不想使用违反YouTube条款和条件的库。


您可以参考这篇博客文章来播放YouTube视频,以及这个问题 - pkc456
@Prathamesh:请参考此文档 https://developers.google.com/youtube/v3/guides/ios_youtube_helper - Developer
@Coder 这是 Objective-C 的代码,我想用 Swift 实现。 - Prathamesh
@Prathamesh UIKit 也是用 ObjC 编写的,你可能想寻找一个替代方案。 - Alexandre G
5个回答

25

如果您不想使用YouTube提供的API并希望继续使用UIWebView,这里有另一个解决方案。

YouTube具有在Web视图中加载任何视频的全屏功能,而不需要使用格式为https://www.youtube.com/embed/<videoId>的URL中的任何滚动特性。

例如,要使用此方法加载江南Style,请将UIWebView直接定向到以下URL:https://www.youtube.com/embed/9bZkp7q19f0


我尝试了你的第二个答案,但是那个导入语句给了我一个“找不到该模块”的错误。我按照CocoaPods的每一步操作了。 - Prathamesh
确实,他们的文档似乎已经过时了。我使用的Pod名称是youtube-ios-player-helper而不是YouTube-Player-iOS-Helper。如果你还感兴趣,我刚刚更新了我的另一个答案,提供了适用于我的步骤。 - Adam

20

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是视频链接中的字符串ID,例如"9bZkp7q19f0"


1
视频不可用,我在使用这个库时遇到了这个错误。 - A. Shukri
问题在于无法播放正常质量的视频(始终为中等,即360p)。 - user924
2
这个官方助手只是UIWebView + YouTube iframe API,所以你可以找到许多其他非官方库(甚至包括Swift + WKWebView)。 - user924

3

1
在你的回答中添加示例代码会提高其质量。 - Gibolt

2

在Swift 4.0中播放Youtube视频

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)
                }
        }
}

0

我创建了一个扩展,使得Youtube视频可以在UIWebViewWKWebView中播放。使用了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
*/

我们可以直接在 WebView 中播放上述 URL。
let urlRequest = URLRequest(url: videoUrl)
webView?.load(urlRequest)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接