web-dev-qa-db-fra.com

Streaming HTTP LIve

Ok, j'ai essayé de faire le tour de ce streaming http en direct. Je ne le comprends tout simplement pas et oui j'ai lu tous les documents Apple et regardé les vidéos wwdc, mais toujours super confus, alors s'il vous plaît, aidez quelqu'un à être programmeur !!!

Le code que vous écrivez va sur le serveur? pas dans xcode? Si j'ai raison, comment puis-je configurer cela? Dois-je configurer quelque chose de spécial sur mon serveur? comme php ou quelque chose? Comment utiliser les outils fournis par Apple .. segmenter et autres?

S'il vous plaît, aidez-moi, merci

54
Mike Owens

Diffusion en direct HTTP

HTTP Live Streaming est une norme de streaming proposée par Apple. Voir la dernière projet de norme .

Les fichiers concernés sont

  • .m4a pour l'audio (si vous voulez un flux audio uniquement).
  • .ts pour la vidéo. Il s'agit d'un transport MPEG-2, généralement avec une charge utile h.264/AAC. Il contient 10 secondes de vidéo et il est créé en fractionnant votre fichier vidéo d'origine ou en convertissant la vidéo en direct.
  • .m3u8 pour la playlist. Il s'agit d'une version UTF-8 du format WinAmp.

Même lorsqu'il est appelé streaming en direct, il y a généralement un délai d'une minute environ pendant lequel la vidéo est convertie, les fichiers ts et m3u8 écrits et votre client actualise le fichier m3u8.

Tous ces fichiers sont des fichiers statiques sur votre serveur. Mais dans les événements en direct, davantage de fichiers .ts sont ajoutés et le fichier m3u8 est mis à jour.

Puisque vous avez tagué cette question sur iOS, il est important de mentionner les règles de l'App Store associées:

  • Vous ne pouvez utiliser le téléchargement progressif que pour des vidéos inférieures à 10 minutes ou 5 Mo toutes les 5 minutes. Sinon, vous devez utiliser HTTP Live Streaming.
  • Si vous utilisez HTTP Live Streaming, vous devez fournir au moins un flux à 64 Kbps ou bande passante inférieure (le flux à faible bande passante peut être uniquement audio ou audio avec une image fixe).

Exemple

Obtenez les outils de streaming

Pour télécharger les outils de diffusion en direct HTTP, procédez comme suit:

Outils de ligne de commande installés:

 /usr/bin/mediastreamsegmenter
 /usr/bin/mediafilesegmenter
 /usr/bin/variantplaylistcreator
 /usr/bin/mediastreamvalidator
 /usr/bin/id3taggenerator

Descriptions de la page de manuel:

  • Media Stream Segmenter: créez des segments à partir de flux de transport MPEG-2 pour la diffusion HTTP en direct.
  • Media File Segmenter: créez des segments pour la diffusion en direct HTTP à partir de fichiers multimédias.
  • Variant Playlist Creator: créez une liste de lecture pour la commutation de flux à partir de segments de streaming HTTP Live créés par mediafilesegmenter.
  • Validateur de flux multimédia: valide les flux et serveurs de diffusion en direct HTTP.
  • Générateur de balises ID3: créez des balises ID3.

Créer la vidéo

Installez Macports, accédez au terminal et Sudo port install ffmpeg. Convertissez ensuite la vidéo en flux de transport (.ts) à l'aide de ce script FFMpeg:

# bitrate, width, and height, you may want to change this
BR=512k
WIDTH=432
HEIGHT=240
input=${1}

# strip off the file extension
output=$(echo ${input} | sed 's/\..*//' )

# works for most videos
ffmpeg -y -i ${input} -f mpegts -acodec libmp3lame -ar 48000 -ab 64k -s ${WIDTH}x${HEIGHT} -vcodec libx264 -b ${BR} -flags +loop -cmp +chroma -partitions +parti4x4+partp8x8+partb8x8 -subq 7 -trellis 0 -refs 0 -coder 0 -me_range 16 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -bt 200k -maxrate ${BR} -bufsize ${BR} -rc_eq 'blurCplx^(1-qComp)' -qcomp 0.6 -qmin 30 -qmax 51 -qdiff 4 -level 30 -aspect ${WIDTH}:${HEIGHT} -g 30 -async 2 ${output}-iphone.ts

Cela générera un fichier .ts. Maintenant, nous devons diviser les fichiers en segments et créer une liste de lecture contenant tous ces fichiers. Nous pouvons utiliser le mediafilesegmenter d'Apple pour cela:

mediafilesegmenter -t 10 myvideo-iphone.ts

Cela générera un fichier .ts pour chaque 10 secondes de la vidéo plus un fichier .m3u8 pointant vers chacun d'eux.

Configurer un serveur Web

Pour jouer un .m3u8 sur iOS, nous pointons le fichier avec safari mobile. Bien sûr, nous devons d'abord les mettre sur un serveur Web. Pour que Safari (ou un autre lecteur) reconnaisse les fichiers ts, nous devons ajouter ses types MIME. Dans Apache:

 AddType application/x-mpegURL m3u8
 AddType video/MP2T ts

Dans lighttpd:

 mimetype.assign = ( ".m3u8" => "application/x-mpegURL", ".ts" => "video/MP2T" )

Pour lier cela à partir d'une page Web:

<html><head>
    <meta name="viewport" content="width=320; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/>
</head><body>
    <video width="320" height="240" src="stream.m3u8" />
</body></html>

Pour détecter l'orientation de l'appareil, voir Détecter et définir l'orientation de la fenêtre d'affichage de l'iPhone et de l'iPad à l'aide de balises JavaScript, CSS et Meta .

Plus de choses que vous pouvez faire est de créer différentes versions de débit binaire de la vidéo, d'incorporer des métadonnées pour la lire tout en jouant sous forme de notifications, et bien sûr de vous amuser à programmer avec MoviePlayerController et AVPlayer.

133
Jano

Cela pourrait aider dans Swift:

    import UIKit
    import MediaPlayer

 class ViewController: UIViewController {

     var streamPlayer : MPMoviePlayerController =  MPMoviePlayerController(contentURL: NSURL(string:"http://qthttp.Apple.com.edgesuite.net/1010qwoeiuryfg/sl.m3u8"))
     override func viewDidLoad() {
         super.viewDidLoad()
         streamPlayer.view.frame = self.view.bounds
         self.view.addSubview(streamPlayer.view)

         streamPlayer.fullscreen = true
         // Play the movie!
         streamPlayer.play()
}
}

MPMoviePlayerController est déconseillé à partir d'iOS 9. Nous pouvons utiliser AVPlayerViewController () ou AVPlayer à cet effet. Regarde:

import AVKit
import AVFoundation
import UIKit

AVPlayerViewController:

override func viewDidAppear(animated: Bool){
let videoURL = NSURL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")
let player = AVPlayer(URL: videoURL!)
let playerViewController = AVPlayerViewController()
playerViewController.player = player
self.presentViewController(playerViewController, animated: true) {
    playerViewController.player!.play()
}
}

AVPlayer:

 override func viewDidAppear(animated: Bool){
    let videoURL = NSURL(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()
    }
4
A.G

Une autre explication de Cloudinary http://cloudinary.com/documentation/video_manipulation_and_delivery#http_live_streaming_hls

HTTP Live Streaming (également connu sous le nom de HLS) est un protocole de communication de streaming multimédia basé sur HTTP qui fournit des mécanismes évolutifs et adaptables à différents réseaux. HLS fonctionne en décomposant un fichier vidéo en une séquence de petits téléchargements de fichiers basés sur HTTP, chaque téléchargement chargeant un court morceau d'un fichier vidéo.

Pendant la lecture du flux vidéo, le lecteur client peut sélectionner un certain nombre de flux vidéo alternatifs différents contenant le même matériel encodé à différents débits de données, permettant à la session de streaming de s'adapter au débit de données disponible avec une lecture de haute qualité sur les réseaux avec bande passante élevée et lecture de faible qualité sur les réseaux où la bande passante est réduite.

Au début de la session de streaming, le logiciel client télécharge un fichier de liste de lecture M3U8 maître contenant les métadonnées des différents sous-flux disponibles. Le logiciel client décide ensuite quoi télécharger à partir des fichiers multimédias disponibles, en fonction de facteurs prédéfinis tels que le type d'appareil, la résolution, le débit de données, la taille, etc.

1
onmyway133