Http потоковым
хорошо, я пытался обернуть голову вокруг этого http live streaming. Я просто не понимаю этого, и да, я прочитал все документы apple и смотрел видео wwdc, но все равно очень запутался, поэтому, пожалуйста, помогите программисту!!!
код, который вы пишете, идет на сервер? не в Xcode? Если я прав, как мне это настроить? Мне нужно настроить что-то особенное на моем сервере? как php или что-то еще? Как использовать инструменты, поставляемые Apple.. сегментатор и такие?
пожалуйста, помогите мне, Спасибо
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, сделайте это:
инструменты командной строки:
- получить учетную запись разработчика Mac или iPhone.
- перейти к http://connect.apple.com и поиск "HTTP Live Streaming Tools", или посмотрите вокруг наhttp://developer.apple.com/resources/http-streaming/.
/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 плейлист файл, содержащий метаданные для различных подпотоков, которые доступны. Затем клиентское программное обеспечение решает, что скачать из доступных мультимедийных файлов, на основе предопределенных факторов, таких как тип устройства, разрешение, скорость передачи данных, размер и т. д.