Do YouTube URL's not work with SwiftUI's VideoPlayer
. I'm attempting to use VideoPlayer(player: AVPlayer(url: URL(string: "https://www.youtube.com/watch?v=ID_HERE")!))
. Is there any workarounds to this? Just shows a black screen.
Asked
Active
Viewed 668 times
1

cole
- 1,039
- 1
- 8
- 35
-
That url is just the url of the page. You probably want this: https://stackoverflow.com/q/31566835/14351818 – aheze Jul 29 '21 at 21:34
1 Answers
2
You need to extract the YouTube video ID, try this:
import WebKit
struct WebView: UIViewRepresentable {
let videoID: String
func makeUIView(context: Context) -> WKWebView {
return WKWebView()
}
func updateUIView(_ uiView: WKWebView, context: Context) {
guard let youTubeURL = URL(string:"https://www.youtube.com/embed/\(videoID)") else { return }
uiView.scrollView.isScrollEnabled = false
uiView.load(URLRequest(url: youTubeURL))
}
}
extension String {
func extractYoutubeID() -> String? {
let pattern = "((?<=(v|V)/)|(?<=be/)|(?<=(\\?|\\&)v=)|(?<=embed/))([\\w-]++)"
let regex = try? NSRegularExpression(pattern: pattern, options: .caseInsensitive)
let range = NSRange(location: 0, length: self.count)
guard let result = regex?.firstMatch(in: self, range: range) else { return nil }
return (self as NSString).substring(with: result.range)
}
}
@State private var youTubeURL: String = "YOUR VIDEO URL"
@State private var youTubeVideoID: String = ""
@State private var validYouTubeURL = false
var body: some View {
VStack {
if validYouTubeURL {
WebView(videoID: self.youTubeVideoID)
.frame(width: 500, height: 500)
}
}.onAppear {
if let videoID = self.youTubeURL.extractYoutubeID() {
self.youTubeURL = ""
self.youTubeVideoID = videoID
self.validYouTubeURL = true
} else {
self.youTubeURL = ""
}
}
}

SwiftUser
- 555
- 6
- 17