wake-up-neo.net

HTTP Live Streaming

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

54
Mike Owens

HTTP Live Streaming

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:

  • Sie können den progressiven Download nur für Videos verwenden, die alle 5 Minuten kürzer als 10 Minuten oder 5 MB sind. Andernfalls müssen Sie HTTP Live Streaming verwenden.
  • Wenn Sie HTTP Live Streaming verwenden, müssen Sie mindestens einen Stream mit 64 Kbps oder niedrigerer Bandbreite (der Stream mit niedriger Bandbreite kann nur Audio oder Audio mit einem Standbild sein) bereitstellen.

Beispiel

Holen Sie sich die Streaming-Tools

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:

  • Media Stream Segmenter: Erstellen Sie Segmente aus MPEG-2-Transportströmen für HTTP Live Streaming.
  • Mediendateisegmentierer: Erstellen Sie Segmente für HTTP Live Streaming aus Mediendateien.
  • Variant Playlist Creator: Erstellen Sie eine Wiedergabeliste für den Streamwechsel aus HTTP Live-Streaming-Segmenten, die von mediafilesegmenter erstellt wurden.
  • Media Stream Validator: Überprüft HTTP Live Streaming-Streams und -Server.
  • ID3-Tag-Generator: Erstellen Sie ID3-Tags.

Erstelle das Video

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.

Richten Sie einen Webserver ein

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.

133
Jano

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()
    }
4
A.G

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.

1
onmyway133