Http потоковым


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

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

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

3 52

3 ответа:

HTTP Live Streaming

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

тип файлов

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

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

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

так как вы пометил этот вопрос iOS уместно упомянуть соответствующие правила магазина приложений:

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

пример

вам потоковые инструменты

чтобы загрузить HTTP Live Streaming Tools, сделайте это:

инструменты командной строки:
 /usr/bin/mediastreamsegmenter
 /usr/bin/mediafilesegmenter
 /usr/bin/variantplaylistcreator
 /usr/bin/mediastreamvalidator
 /usr/bin/id3taggenerator

описания от человека страница:

  • Media Stream Segmenter: создание сегментов из MPEG-2 транспортных потоков для HTTP Live Streaming.
  • Media File Segmenter: создание сегментов для HTTP Live Streaming из медиафайлов.
  • Variant Playlist Creator: создание списка воспроизведения для переключения потока из HTTP Live streaming сегментов, созданных mediafilesegmenter.
  • Media Stream Validator: проверяет HTTP Live Streaming streams и серверы.
  • 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=

# 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

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

mediafilesegmenter -t 10 myvideo-iphone.ts

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

настройки веб-сервера

играть .m3u8 на iOS мы указываем на файл с мобильным safari. Конечно, сначала нам нужно поместить их на веб-сервер. Для 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.

это может помочь в 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()
    }

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

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

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

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