2016-06-21 12 views
2

Grundsätzlich versuche ich einen m3u8 (HLS Live Stream) mit AVPlayer in Cocoa Swift zu spielen. Ich bin relativ neu in der Sprache, so packte im Grunde etwas example code für lokale Videodateien und versucht, es zu modifizieren einen Live-Stream zu spielen ... Aber erhalten Sie stattdessen:Wiedergabe von HLS (m3u8) in Cocoa OS X AVPlayer - Swift

http://i.stack.imgur.com/bU9GM.png

Das ist, was ich habe bisher (kommentierten Zeilen sind lokale Datei zu spielen, die Arbeit der Fall ist):

import Cocoa 
import AVKit 
import Foundation 
import AVFoundation 

class ViewController: NSViewController { 

    @IBOutlet weak var playerView: AVPlayerView! 

    var videoPlayer:AVPlayer! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     //let path = NSBundle.mainBundle().pathForResource("sample", ofType: "mov") 
     //var fileURL = NSURL(fileURLWithPath: path!) 
     let fileURL = NSURL(string: "http://qthttp.apple.com.edgesuite.net/1010qwoeiuryfg/sl.m3u8") 
     let avAsset = AVURLAsset(URL: fileURL!, options: nil) 

     let playerItem = AVPlayerItem(asset: avAsset) 
     videoPlayer = AVPlayer(playerItem: playerItem) 
     playerView.player = videoPlayer 
     videoPlayer.play() 
    } 

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

Jede Hilfe, wie dieser Code funktioniert, oder mich in die richtige Richtung führen wird sehr geschätzt!

Antwort

2

Ich habe versucht, den Code in ein neues OS X Projekt einfügen

Als ich das Projekt startete ich habe diesen Fehler in der Konsole (oder macOS, wie wir es nennen jetzt :) beginnen muss):

2016-06-21 09:09:27.860 Videoplayer[2494:169209] App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file. 

Ich weiß nicht, ob Sie die Konsole aktiviert haben, es ist der untere Teil Ihres Bildschirms, sofern Sie den Debug-Bereich aktiviert haben.

Wenn Sie nicht der Debug-Bereich aktiviert bekommen haben, dann können Sie es in der Spitze der Xcode

enable debug area

Und dann müssen Sie sicherstellen, dass Sie die Konsole als auch zeigen, das ist im unteren Teil von Xcode getan:

enable console

OK, jetzt können Sie den Fehler sehen, dann, wie es zu beheben :)

Diese Nachricht teilt Ihnen grundsätzlich mit, dass Apple den Zugriff auf HTTP gesperrt hat. Dies wurde in OS X 10.11 und iOS 9 eingeführt, kann aber deaktiviert werden.

Wie heißt es in der Konsole:

Temporary exceptions can be configured via your app's Info.plist file.

Das bedeutet, dass Sie einen neuen Schlüssel zu Ihrer info.plist Datei hinzufügen sollten.

Sie können es hinzufügen als "raw" plist Daten, die wie folgt aussieht:

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSAllowsArbitraryLoads</key> 
    <true/> 
</dict> 

Oder Sie können es in der plist-Editor hinzufügen, wo es wie folgt aussieht:

editing plist

This question und die großen Antworten beschreibt den Prozess besser, dass ich kann

Wenn ich dies tun, bin ich in der Lage, Ihren Code zu bekommen und kann watc Ich bin der Live-Stream, also hoffe ich, dass dir das auch hilft.

+0

Wow, vielen Dank! Sollte das erkannt haben war das Problem – user3063455

+0

Gern geschehen. Schön, dass es jetzt für dich funktioniert. – pbodsk

+0

@pbodsk - Ich bekomme diesen Fehler in Code-Anweisung Lassen Sie AVAsset = AVURLAsset (URL: my_url !, Optionen: Nil) - 'NSURL' ist nicht implizit in 'URL' konvertierbar; meinst du, 'wie' zu verwenden, um explizit zu konvertieren?Irgendwelche Ideen, warum ihr diesen Fehler nicht bekommt, aber ich tue? –