ios - example - HTTP LIve Streaming
hls live stream example (3)
Ok, he estado tratando de entender esta transmisión en vivo de http. Simplemente no lo entiendo y sí, he leído todos los documentos de Apple y vi los videos de wwdc, pero todavía estoy muy confundido, así que por favor ayuda a ser un programador.
El código que escribes va al servidor? no en xcode? Si estoy en lo cierto, ¿cómo configuro esto? ¿Debo configurar algo especial en mi servidor? como php o algo? ¿Cómo se usan las herramientas que son suministradas por Apple ... segmenter y tal?
Por favor, ayúdame, gracias
HTTP Live Streaming
HTTP Live Streaming es un estándar de transmisión propuesto por Apple. Vea el último borrador del estándar .
Los archivos involucrados son
-
.m4a
para audio (si solo quieres una transmisión de audio). -
.ts
para video. Este es un transporte MPEG-2, generalmente con una carga útil h.264 / AAC. Contiene 10 segundos de video y se crea dividiendo el archivo de video original o convirtiendo el video en vivo. -
.m3u8
para la lista de reproducción. Esta es una versión UTF-8 del formato WinAmp.
Incluso cuando se llama transmisión en vivo, generalmente hay un retraso de aproximadamente un minuto durante el cual se convierte el video, se escriben los archivos ts y m3u8, y su cliente actualiza el archivo m3u8.
Todos estos archivos son archivos estáticos en su servidor. Pero en eventos en vivo, se agregan más archivos .ts y se actualiza el archivo m3u8.
Dado que etiquetó esta pregunta iOS, es relevante mencionar las reglas relacionadas de la App Store:
- Solo puede usar la descarga progresiva para videos de menos de 10 minutos o 5 MB cada 5 minutos. De lo contrario, debe usar HTTP Live Streaming.
- Si usa HTTP Live Streaming, debe proporcionar al menos una transmisión a 64 Kbps o un ancho de banda inferior (la transmisión de ancho de banda bajo puede ser solo de audio o audio con una imagen estática).
Ejemplo
Obtenga las herramientas de transmisión
Para descargar HTTP Live Streaming Tools, haga lo siguiente:
- Obtenga una cuenta de desarrollador de Mac o iPhone.
- Vaya a http://connect.apple.com y busque "HTTP Live Streaming Tools", o consulte http://developer.apple.com/resources/http-streaming/ .
Herramientas de línea de comando instaladas:
/usr/bin/mediastreamsegmenter
/usr/bin/mediafilesegmenter
/usr/bin/variantplaylistcreator
/usr/bin/mediastreamvalidator
/usr/bin/id3taggenerator
Descripciones de la página man:
- Segmentador de flujo de medios: cree segmentos de transmisiones de transporte MPEG-2 para HTTP Live Streaming.
- Segmentador de archivos multimedia: cree segmentos para HTTP Live Streaming desde archivos multimedia.
- Creador de listas de reproducción variadas: crea una lista de reproducción para cambiar la transmisión de los segmentos de transmisión de HTTP Live creados por mediafilesegmenter.
- Validador de Media Stream: valida las transmisiones y servidores de transmisión en vivo de HTTP.
- ID3 Tag Generator: Crea etiquetas ID3.
Crea el video
Instale Macports, vaya a la terminal y sudo port install ffmpeg
. A continuación, convierta el video a la transmisión de transporte (.ts) con este 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
Esto generará un archivo .ts. Ahora tenemos que dividir los archivos en segmentos y crear una lista de reproducción que contenga todos esos archivos. Podemos usar el mediafilesegmenter
de mediafilesegmenter
de Apple para esto:
mediafilesegmenter -t 10 myvideo-iphone.ts
Esto generará un archivo .ts por cada 10 segundos del video más un archivo .m3u8 apuntando a todos ellos.
Configurar un servidor web
Para jugar un .m3u8
en iOS, .m3u8
al archivo con safari móvil. Por supuesto, primero tenemos que ponerlos en un servidor web. Para que Safari (u otro jugador) reconozca los archivos ts, necesitamos agregar sus tipos MIME. En Apache:
AddType application/x-mpegURL m3u8
AddType video/MP2T ts
En lighttpd:
mimetype.assign = ( ".m3u8" => "application/x-mpegURL", ".ts" => "video/MP2T" )
Para vincular esto desde una página 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>
Para detectar la orientación del dispositivo, vea Detectar y configurar la orientación de la ventana del iPhone y el iPad usando JavaScript, CSS y Meta Tags .
Más cosas que puede hacer es crear diferentes versiones de bitrate del video, incrustar metadatos para leerlo mientras se reproduce como notificaciones, y por supuesto tener una programación divertida con MoviePlayerController y AVPlayer.
Esto podría ayudar a acelerar:
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á en desuso desde iOS 9 en adelante. Podemos usar AVPlayerViewController () o AVPlayer para este propósito. Echar un vistazo:
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()
}
Otra explicación de Cloudinary http://cloudinary.com/documentation/video_manipulation_and_delivery#http_live_streaming_hls
HTTP Live Streaming (también conocido como HLS) es un protocolo de comunicaciones de transmisión de medios basado en HTTP que proporciona mecanismos que son escalables y adaptables a diferentes redes. HLS funciona descomponiendo un archivo de video en una secuencia de pequeñas descargas de archivos basadas en HTTP, y cada descarga carga un trozo corto de un archivo de video.
A medida que se reproduce la secuencia de video, el jugador del cliente puede seleccionar entre varias transmisiones de video alternativas que contienen el mismo material codificado a una variedad de velocidades de datos, permitiendo que la sesión de transmisión se adapte a la velocidad de datos disponible con reproducción de alta calidad en redes con alto ancho de banda y reproducción de baja calidad en redes donde se reduce el ancho de banda.
Al comienzo de la sesión de transmisión, el software del cliente descarga un archivo de lista de reproducción maestra M3U8 que contiene los metadatos de las diversas subflujos que están disponibles. El software del cliente luego decide qué descargar de los archivos multimedia disponibles, en función de factores predefinidos como el tipo de dispositivo, la resolución, la velocidad de datos, el tamaño, etc.