Q&A
前提・実現したいこと
ボタンを押すと、youtube上の動画が再生される、というプログラムを作っています。
実装中、以下の問題が発生しました。
発生している問題
ボタンをタップすると、再生する画面は開くのですが、肝心の動画が再生されません。
↓ずっとローディングで、このような状態です。
該当のソースコード
swift
1import UIKit 2import AVFoundation 3import MediaPlayer 4import AVKit 5 6class RecipeDetailViewController: UIViewController{ 7 8 @IBOutlet var playButton: UIButton! 9 10 var player: AVPlayer? 11 12 13 @IBAction func playVideo() { 14 print("playvideoが呼ばれた") 15 guard let url = URL(string: "https://www.learningcontainer.com/wp-content/uploads/2020/05/sample-mp4-file.mp4") else { return } 16 17 // Create an AVPlayer, passing it the HTTP Live Streaming URL. 18 player = AVPlayer(url: url) 19 20 // Create a new AVPlayerViewController and pass it a reference to the player. 21 let controller = AVPlayerViewController() 22 controller.player = player 23 24 25 // Modally present the player and call the player's play() method when complete. 26 self.present(controller, animated: true) {[self] in 27 print("presentが呼ばれた") 28 player!.play() 29 } 30 } 31 32 override func viewDidLoad() { 33 super.viewDidLoad() 34 35 playButton.setTitle("", for: UIControl.State.normal) 36 playButton.tag = 0 37 playButton.addTarget(self, action: #selector(self.tappedVideo(_ :)), for: .touchUpInside) 38 39 } 40 41 @objc func tappedVideo(_ sender: UIButton){ 42 playVideo() 43 print("ボタンがタップされた") 44 } 45} 46
試したこと
- YouTubeのリンクに問題があるのかと思って、変えてみました。
- printによると、
playvideoが呼ばれた→ボタンがタップされた→presentが呼ばれた
の順で呼ばれました。
guard let url = URL(string: "https://www.learningcontainer.com/wp-content/uploads/2020/05/sample-mp4-file.mp4")
や
player = AVPlayer(url: url)
を@IBAction func playVideo()
のかっこの外に出してみました。
が、いずれも、初めにあげた問題と同じ状態になりました。
お分かりになる方、回答よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2021/10/27 21:14
2021/10/28 12:49 編集
2021/11/01 06:21