Ok, ich habe versucht, mich mit diesem http-Live-Streaming zu beschäftigen. Ich verstehe es einfach nicht und ja ich habe alle Apple docs gelesen und die wwdc videos angeschaut, aber immer noch super verwirrt, also bitte helft einem der Programmierer raus !!!
Der Code, den Sie schreiben, geht auf den Server? nicht in xcode? Wenn ich recht habe, wie stelle ich das ein? Muss ich auf meinem Server etwas Besonderes einrichten? wie PHP oder so etwas? Wie verwende ich die Tools, die von Apple .. segmenter und so geliefert werden?
Bitte hilf mir, danke
HTTP Live Streaming ist ein von Apple vorgeschlagener Streaming-Standard. Siehe den neuesten Standardentwurf .
Betroffene Dateien sind
.m4a
Für Audio (wenn Sie nur einen Audiostream wünschen)..ts
Für Video. Dies ist ein MPEG-2-Transport, normalerweise mit einer h.264/AAC-Nutzlast. Es enthält 10 Sekunden Video und wird durch Teilen der Originalvideodatei oder durch Konvertieren des Live-Videos erstellt..m3u8
Für die Wiedergabeliste. Dies ist eine UTF-8-Version des WinAmp-Formats.Selbst wenn es als Live-Streaming bezeichnet wird, gibt es normalerweise eine Verzögerung von etwa einer Minute, während der das Video konvertiert, die ts- und m3u8-Dateien geschrieben und Ihr Client die m3u8-Datei aktualisiert wird.
Alle diese Dateien sind statische Dateien auf Ihrem Server. Bei Live-Events werden jedoch weitere .ts-Dateien hinzugefügt und die m3u8-Datei aktualisiert.
Da Sie diese Frage mit iOS markiert haben, ist es wichtig, die zugehörigen App Store-Regeln zu erwähnen:
So laden Sie die HTTP Live Streaming Tools herunter:
Kommandozeilen-Tools installiert:
/usr/bin/mediastreamsegmenter
/usr/bin/mediafilesegmenter
/usr/bin/variantplaylistcreator
/usr/bin/mediastreamvalidator
/usr/bin/id3taggenerator
Beschreibungen aus der Manpage:
Installieren Sie Macports, gehen Sie zum Terminal und Sudo port install ffmpeg
. Konvertieren Sie dann das Video mithilfe des folgenden FFMpeg-Skripts in einen Transport-Stream (.ts):
# 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
Dadurch wird eine .ts-Datei generiert. Jetzt müssen wir die Dateien in Segmente aufteilen und eine Wiedergabeliste erstellen, die alle diese Dateien enthält. Dafür können wir Apples mediafilesegmenter
verwenden:
mediafilesegmenter -t 10 myvideo-iphone.ts
Dadurch wird eine .ts-Datei für jeweils 10 Sekunden des Videos sowie eine .m3u8-Datei generiert, die auf alle verweist.
Um einen .m3u8
Auf iOS zu spielen, verweisen wir auf die Datei mit der mobilen Safari. Natürlich müssen wir sie zuerst auf einen Webserver stellen. Damit Safari (oder ein anderer Player) die ts-Dateien erkennt, müssen die MIME-Typen hinzugefügt werden. In Apache:
AddType application/x-mpegURL m3u8
AddType video/MP2T ts
In lighttpd:
mimetype.assign = ( ".m3u8" => "application/x-mpegURL", ".ts" => "video/MP2T" )
So verlinken Sie diese von einer Webseite:
<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>
Informationen zum Erkennen der Geräteorientierung finden Sie unter Erkennen und Festlegen der Ansichtsfensterorientierung von iPhone und iPad mithilfe von JavaScript, CSS und Meta-Tags .
Sie können außerdem verschiedene Bitratenversionen des Videos erstellen, Metadaten einbetten, um sie beim Abspielen als Benachrichtigungen zu lesen, und natürlich Spaß beim Programmieren mit MoviePlayerController und AVPlayer haben.
Dies könnte in Swift: helfen
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 ist ab iOS 9 veraltet. Wir können AVPlayerViewController () oder AVPlayer für diesen Zweck verwenden. Guck mal:
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()
}
Eine weitere Erklärung von Cloudinary http://cloudinary.com/documentation/video_manipulation_and_delivery#http_live_streaming_hls
HTTP Live Streaming (auch als HLS bezeichnet) ist ein auf HTTP basierendes Kommunikationsprotokoll für Media Streaming, das skalierbare und an verschiedene Netzwerke anpassbare Mechanismen bietet. HLS zerlegt eine Videodatei in eine Folge kleiner HTTP-basierter Dateidownloads, wobei jeder Download einen kurzen Teil einer Videodatei lädt.
Während der Wiedergabe des Videostreams kann der Client-Player aus einer Reihe verschiedener alternativer Videostreams auswählen, die dasselbe Material enthalten und mit unterschiedlichen Datenraten codiert sind. Auf diese Weise kann sich die Streaming-Sitzung bei der Wiedergabe in Netzwerken mit hoher Qualität an die verfügbare Datenrate anpassen Hohe Bandbreite und Wiedergabe in geringer Qualität in Netzwerken, in denen die Bandbreite reduziert ist.
Zu Beginn der Streaming-Sitzung lädt die Client-Software eine Master-M3U8-Wiedergabelistendatei herunter, die die Metadaten für die verschiedenen verfügbaren Sub-Streams enthält. Die Client-Software entscheidet dann basierend auf vordefinierten Faktoren wie Gerätetyp, Auflösung, Datenrate, Größe usw., was aus den verfügbaren Mediendateien heruntergeladen werden soll.