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
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:
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:
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.
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.
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()
}
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.