2016-09-01 3 views
9

組み込みブラウザからHTMLビデオをフルスクリーンで再生するときに、画面を引き継ぐAVPlayerインスタンスへの参照を保持したいと考えています。私の最初のアプローチはこれでした:スイフト:フルスクリーンHTMLビデオのプレーヤーオブジェクトへのアクセス方法?

extension AVPlayerViewController { 

    override public func viewDidAppear(animated: Bool) { 
     super.viewDidAppear(animated) 

     print("herezzzzzzzzzzzzzzzzzzzzzzzzzzz") // prints correctly 
     print(self.player) // prints nil 
    } 
} 

しかし、常にnilを返します。だから私は別のアプローチを試みている。 AVPlayerのイニシャライザまたはplayメソッドをオーバーライドしたいのですが、私はobjective-cセレクタの競合がなければそれを行うことはできません。

import AVKit 
import MediaPlayer 

extension AVPlayer { 
    override func play() { // this doesn't work. just an example of what i want 
    super.play() 

    print("do stuff here") 
    } 
} 

私はselfへの参照を格納することができますので、AVPlayerのインスタンスメソッドのいずれかをオーバーライドする方法はありますか?それとも、AVPlayerでさえないのですか?

+0

これはあなたを助けませんでしたか? http://stackoverflow.com/questions/25932570/how-to-play-video-with-avplayerviewcontroller-avkit-in-swift – Santosh

+0

埋め込みブラウザでビデオを再生するときに開くデフォルトのプレーヤーへの参照が必要です。 – Edmund

答えて

1

エクステンションからメソッドをオーバーライドすることはできません。より正確に言えば、コンパイラはこれを許可しますが、動作しません。このスレッドをご覧ください:Overriding methods in Swift extensions

あなたはサブクラスAVPlayerViewControllerも想定していません。

は、なぜあなたはそれを作成したクラスにAVPlayerViewControllerplayerプロパティを読み取ることができませんか?

+0

私は埋め込みブラウザから全画面表示されるすべてのビデオに対してこれを実行しようとしていますので、画面を引き継ぐ「プレーヤー」を取得するグローバルな方法が必要です – Edmund

+0

私はあなたがいないと思います運が良かった。 –

1

"そのUIWebView内でビデオコンテンツを再生するために使用される最も重要なクラスは、MPAVControllerおよびUIMoviePlayerController"と呼ばれます。したがって、AVPlayerのインスタンスを取得することはできません。

詳細については、How to receive NSNotifications from UIWebView embedded YouTube video playbackをご覧ください。

関連する問題