2017-06-27 1 views
0

Ich versuche, meine macOS Cocoa-Anwendung Xcode Projekt zu bekommen, einige Videos zu spielen, wenn ich es eine angegebene URL füttere.Wie kann ich ein Video aus dem Web innerhalb einer Xcode macOS Cocoa-Anwendung einbetten und streamen?

Um die Frage zu vereinfachen, verwenden Sie einfach ein leeres Xcode-Projekt.

Ich möchte das gleiche Maß an Kontrolle erreichen, wie ich mit AVPlayerViewController() in meinem iOS Single View Anwendung erreichen kann. Innerhalb dieser App verwende ich derzeit die angebotene Lösung here.

jedoch nur das zweite Beispiel funktioniert in meinem macOS Cocoa-Anwendung, wenn wie so angepasst:

import Cocoa 
import AVFoundation 
import AVKit 

class ViewController: NSViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let videoURL = URL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4") 
     let player = AVPlayer(url: videoURL!) 
     let playerLayer = AVPlayerLayer(player: player) 
     playerLayer.frame = self.view.bounds 
     self.view.layer?.addSublayer(playerLayer) 
     player.play() 

    } 

    override var representedObject: Any? { 
     didSet { 
     // Update the view, if already loaded. 
     } 
    } 


} 

Diese Option hat jedoch 2 Nachteile:

  1. Es schafft eine sich wiederholende Fehlermeldung in der Konsole:

    2017-06-27 18:22:06.833441+0200 testVideoOnmacOS[24456:1216773] initWithSessionInfo: XPC connection interrupted 
    2017-06-27 18:22:06.834830+0200 testVideoOnmacOS[24456:1216773] startConfigurationWithCompletionHandler: Failed to get remote object proxy: Error Domain=NSCocoaErrorDomain Code=4097 "connection to service named com.apple.rtcreportingd" UserInfo={NSDebugDescription=connection to service named com.apple.rtcreportingd} 
    
  2. DieseLösung bietet nicht die gleiche Kontrolle wie die AVPlayerViewController() Lösung.

Also habe ich versucht, die folgende AVPlayerViewController() Lösung zur Arbeit zu kommen. Aber es funktioniert nicht:

import Cocoa 
import AVFoundation 
import AVKit 

class ViewController: NSViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let videoURL = URL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4") 
     let player = AVPlayer(url: videoURL!) 
     let playerViewController = AVPlayerViewController() 
     playerViewController.player = player 
     self.present(playerViewController, animated: true) { 
      playerViewController.player!.play() 
     } 

    } 

    override var representedObject: Any? { 
     didSet { 
     // Update the view, if already loaded. 
     } 
    } 


} 

Der Fehler Ich erhalte ist:

Verwendung von ungelöster Kennung 'AVPlayerViewController' - Meinen Sie 'AVPlayerViewControlsStyle'?

Ich habe versucht, dies auf viele verschiedene Arten zu umgehen. Es wird verwirrend sein, wenn ich sie alle buchstabiere. Mein prominentes Problem scheint zu sein, dass die überwiegende Mehrheit der Online-Beispiele auf iOS basieren.

Somit ist die Hauptfrage:

Wie würde ich in der Lage sein, erfolgreich AVPlayerViewController in meiner Xcode macOS Cocoa-Anwendung zu verwenden?

+1

'AVPlayerViewController' existiert nur in iOS und tvOS. Sie müssen 'AVPlayer' verwenden und seine Ebene als Unterlayer Ihres' NSViewController' hinzufügen. Ihre zwei Fehler scheinen nichts mit AVFoundation zu tun zu haben. – JAL

+1

Versuchen Sie AVPlayerView https://developer.apple.com/documentation/avkit/avplayerview – ninjaproger

Antwort

1

Ja, es funktioniert!

Thnx zu ninjaprogers Kommentar.

Dies scheint zu arbeiten, um ein Video aus dem Internet spielen/Streaming auf einer macOS Cocoa-Anwendung in Xcode zu bekommen.

Erstellen Sie zuerst ein AVKitPlayerView in Ihrem Storyboard und verknüpfen Sie es als ein IBOutlet mit Ihrem NSViewController.

Dann wenden Sie einfach diesen Code:

import Cocoa 
import AVFoundation 
import AVKit 

class ViewController: NSViewController { 
    @IBOutlet var videoView: AVPlayerView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let videoURL = URL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4") 
     let player = AVPlayer(url: videoURL!) 
     let playerViewController = videoView 
     playerViewController?.player = player 
     playerViewController?.player!.play() 

    } 

    override var representedObject: Any? { 
     didSet { 
     // Update the view, if already loaded. 
     } 
    } 


} 
+0

Ich habe genau den gleichen Code wie oben, aber ich bekomme die folgenden Fehler: 2017-11-10 19: 24: 39.624713-0800 AVPlayer [3611: 195886 ] initWithSessionInfo: XPC-Verbindung unterbrochen 2017-11-10 19: 24: 39.625393-0800 AVPlayer [3611: 195886] startConfigurationWithCompletionHandler: Remote-Objektproxy konnte nicht abgerufen werden: Fehlerdomäne = NSCOAErrorDomain Code = 4097 "Verbindung zum Dienst namens com.apple. rtcreportingd "UserInfo = {NSDebugDescription = Verbindung zu Service namens com.apple.rtcreportingd} –

+0

nach dem oben genannten ist der folgende: 017-11-10 19: 24: 39.625509-0800 AVPlayer [3611: 195886] 2017-11-10 19 : 24: 52.886022-0800 AVPlayer [3611: 195887] sendMessageWithCategory: Fehler beim Abrufen des Remoteobjekt-Proxys: Fehler Domain = NSCOAErrorDomain Code = 4097 "Verbindung zum Dienst namens com.apple.rtcrepo rtingd "UserInfo = {NSDebugDescription = Verbindung zu Service namens com.apple.rtcreportingd} 2017-11-10 19: 24: 52.886206-0800 AVPlayer [3611: 195887] initWithSessionInfo: Die XPC-Verbindung wurde unterbrochen 2017-11-10 19:24 : 52.886320-0800 AVPlayer [3611: 195810] initWithSessionInfo: XPC-Verbindung ungültig –

Verwandte Themen