3 votes

Lecture de HLS (m3u8) dans Cocoa OS X AVPlayer - Swift

En gros, j'essaie de lire un m3u8 (HLS Live Stream) en utilisant AVPlayer en Cocoa Swift. Je suis relativement nouveau dans le langage, donc j'ai simplement pris quelques exemples. exemple de code pour lire des fichiers vidéo locaux et j'ai essayé de le modifier pour lire un flux en direct... Mais j'obtiens ceci à la place :

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

Voici ce que j'ai obtenu jusqu'à présent (les lignes commentées sont pour lire le fichier local, ce qui fonctionne) :

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.
        }
    }
}

Toute aide sur la façon de faire fonctionner ce code, ou m'orienter dans la bonne direction est très appréciée !

3voto

pbodsk Points 4541

J'ai essayé de coller votre code dans un nouveau projet OS X (ou macOS comme nous devons commencer à l'appeler maintenant :))

Lorsque j'ai lancé le projet, j'ai obtenu cette erreur dans la console :

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.

Je ne sais pas si vous avez activé la console, c'est la partie inférieure de votre écran, à condition que vous ayez activé la zone de débogage.

Si la zone de débogage n'est pas activée, il faut l'activer en haut de Xcode.

enable debug area

Ensuite, vous devez vous assurer que vous affichez également la console, ce qui est fait dans la partie inférieure de Xcode :

enable console

OK, maintenant vous pouvez voir l'erreur, alors comment la corriger :)

Ce message vous dit essentiellement qu'Apple a bloqué l'accès à HTTP . Cette fonction a été introduite dans OS X 10.11 et iOS 9, mais peut être désactivée.

Comme il est dit dans la console :

Les exceptions temporaires peuvent être configurées via le fichier Info.plist de votre application.

Cela signifie que vous devriez ajouter une nouvelle clé à votre info.plist fichier.

Vous pouvez l'ajouter en tant que données plist "brutes", ce qui ressemble à ceci :

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

Ou vous pouvez l'ajouter dans l'éditeur plist, où il ressemble à ceci :

editing plist

Cette question et les grandes réponses décrivent le processus mieux que je ne peux le faire.

Si je fais cela, je suis en mesure de faire fonctionner votre code et je peux regarder le flux en direct, donc j'espère que cela vous aidera aussi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X