Подтвердить что ты не робот

HTTP LIve Streaming

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

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

Пожалуйста, помогите мне, Благодаря

4b9b3361

Ответ 1

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 Streaming Tools, сделайте это:

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

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

Описания из справочной страницы:

  • Сегментер медиапотока: создание сегментов из транспортных потоков MPEG-2 для потоковой передачи по HTTP.
  • Сегментер мультимедийных файлов: создание сегментов для потоковой передачи по HTTP из мультимедийных файлов.
  • Variant Playlist Creator: создайте список воспроизведения для переключения потоков из потоковых сегментов HTTP Live, созданных mediafilesegmenter.
  • Media Stream Validator: проверяет потоковые HTTP-потоки и серверы.
  • Генератор тегов 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. Теперь нам нужно разделить файлы на сегменты и создать список воспроизведения, содержащий все эти файлы. Мы можем использовать Apple mediafilesegmenter для этого:

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.

Ответ 2

Это может помочь в быстро:

    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()
    }

Ответ 3

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

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

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

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