HTTP LIve Streaming - PullRequest
       4

HTTP LIve Streaming

54 голосов
/ 06 июля 2011

Хорошо, я пытался обернуть голову вокруг этой прямой трансляции http. Я просто не понимаю этого, и да, я прочитал все документы по Apple и посмотрел видео на wwdc, но все еще в замешательстве, поэтому, пожалуйста, помогите мне стать программистом !!!

Код, который вы пишете, отправляется на сервер? не в xcode? Если я прав, как мне это настроить? Нужно ли устанавливать что-то особенное на моем сервере? как php или что-то? Как использовать инструменты, поставляемые Apple .. segmenter и тому подобное?

Пожалуйста, помогите мне, Спасибо

Ответы [ 3 ]

132 голосов
/ 06 июля 2011

HTTP Live Streaming

HTTP Live Streaming - это стандарт потоковой передачи, предложенный Apple.См. Последний черновой стандарт .

. Используемые файлы

  • .m4a для аудио (если вы хотите только поток аудио).
  • .ts для видео.Это транспорт MPEG-2, обычно с полезной нагрузкой h.264 / AAC.Он содержит 10 секунд видео и создается путем разделения исходного видеофайла или преобразования живого видео.
  • .m3u8 для списка воспроизведения.Это UTF-8 версия формата WinAmp.

Даже когда это называется потоковой передачей, обычно есть задержка в одну минуту или около того, в течение которой конвертируется видео, записываются файлы ts и m3u8, и ваш клиент обновляет файл m3u8.

Все эти файлы являются статическими файлами на вашем сервере.Но в живых событиях добавляется больше файлов .ts, а файл m3u8 обновляется.

Поскольку вы пометили этот вопрос iOS, важно упомянуть связанные правила App Store:

  • Вы можете использовать прогрессивную загрузку только для видео размером менее 10 минут или 5 МБ каждые 5 минут.В противном случае вы должны использовать HTTP Live Streaming.
  • Если вы используете HTTP Live Streaming, вы должны предоставить как минимум один поток на 64 Кбит / с или с меньшей пропускной способностью (поток с низкой пропускной способностью может быть только аудио или аудио с неподвижным изображением).).

Пример

Получить инструменты потоковой передачи

Для загрузки инструментов потоковой передачи HTTP Live сделайте следующее:

Установленные инструменты командной строки:

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

Описание со страницы руководства:

  • Сегментер медиапотока: создание сегментов из транспортных потоков MPEG-2 для потоковой передачи по HTTP.
  • Сегментер медиафайлов: создание сегментов для HTTPПрямая трансляция из мультимедийных файлов.
  • Variant Playlist Creator: создание списка воспроизведения для переключения потоков из сегментов потоковой передачи HTTP, созданных mediafilesegmenter.
  • Средство проверки потока мультимедиа: проверка потоков и потоков HTTP Live Streaming.
  • Генератор тегов ID3: создание тегов ID3.

Создание видео

Установите Macports, перейдите в терминал и sudo port install ffmpeg.Затем преобразуйте видео в транспортный поток (.ts) с помощью этого сценария 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

Это создаст один файл .ts.Теперь нам нужно разделить файлы на сегменты и создать список воспроизведения, содержащий все эти файлы.Для этого мы можем использовать mediafilesegmenter от Apple:

mediafilesegmenter -t 10 myvideo-iphone.ts

Это сгенерирует один файл .ts для каждых 10 секунд видео плюс файл .m3u8, указывающий на все из них.

Настройка веб-сервера

Чтобы воспроизвести .m3u8 на iOS, мы указываем на файл с мобильным сафари.Конечно, сначала нам нужно разместить их на веб-сервере.Чтобы Safari (или другой проигрыватель) распознавал файлы ts, нам нужно добавить его типы MIME.В Apache:

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

В lighttpd:

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

Чтобы связать это с веб-страницы:

<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>

Для определения ориентации устройства см. Обнаружение и установка ориентации области просмотра iPhone и iPad с использованием JavaScript, CSS и метатеги .

Еще одна вещь, которую вы можете сделать, - это создавать разные версии видео с битрейтом, вставлять метаданные, чтобы читать их во время воспроизведения в качестве уведомлений,и, конечно, получайте удовольствие от программирования с помощью MoviePlayerController и AVPlayer.

4 голосов
/ 12 февраля 2016

Это может помочь в 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 устарел с iOS 9 и выше. Мы можем использовать AVPlayerViewController () или AVPlayer для этой цели. Посмотрите:

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()
    }
1 голос
/ 31 мая 2016

Другое объяснение от Cloudinary http://cloudinary.com/documentation/video_manipulation_and_delivery#http_live_streaming_hls

HTTP Live Streaming (также известный как HLS) - это протокол связи потоковой передачи мультимедиа на основе HTTP, который обеспечивает механизмы, которые можно масштабировать и адаптировать к различным сетям. HLS работает, разбивая видеофайл на последовательность небольших загрузок файлов на основе HTTP, причем каждая загрузка загружает один короткий фрагмент видеофайла.

При воспроизведении видеопотока клиентский проигрыватель может выбирать из ряда различных альтернативных видеопотоков, содержащих один и тот же материал, закодированный с различными скоростями передачи данных, что позволяет сеансу потоковой передачи адаптироваться к доступной скорости передачи данных с высоким качеством воспроизведения. в сетях с высокой пропускной способностью и низким качеством воспроизведения в сетях с ограниченной пропускной способностью.

В начале сеанса потоковой передачи клиентское программное обеспечение загружает основной файл списка воспроизведения M3U8, содержащий метаданные для различных доступных подпотоков. Клиентское программное обеспечение затем решает, что загружать из доступных мультимедийных файлов, на основе предварительно определенных факторов, таких как тип устройства, разрешение, скорость передачи данных, размер и т. Д.

...