HLSについて知っていることを話します

M
HLSについて私が知っている
ことを話します
moriyoshi
自己紹介
•ffmpeg大好き
•ffmpegが好きすぎてパッチを投げたがMichael
Niedermayerにマサカリを投げ返された
https://lists.ffmpeg.org/pipermail/ffmpeg-devel/2006-
December/008978.html
HLSとは
• HTTP Live Streaming の略
• ざっくり言うと、HTTPを使って一般的なインターネットラジオと同じ要
領で動画を配信する技術
• 2009年にAppleがiOS3に初めて搭載した。
• IETF Internet Draft
• Androidなどでのサポートもあり、モバイルデバイスではデファクトの
ストリーミング方式となっている
おっさんのためのHLSの歴史
• 1997年 Winamp登場
• プレイリストとしての .m3u 形式の誕生
• 1998年9月 Winamp2 登場
• プレイリストとしての .pls 形式が登場
• 1998年 SHOUTcast 誕生
• 動的年末なプレイリスト生成による簡易ストリーミング
おっさんのためのHLSの歴史
• 1999年 SoundJam MP
• MacOS9用の mp3 プレイヤー
• Stream playback capability
• 2000年 Apple が SoundJamMP 開発元の Casady & Greene, Inc. 買収
• 2001年1月 iTunes 1.0
• SoundJam MPがベース
おっさんのためのHLSの歴史
• 2009年 iOS 3
• HLS のサポート
• first internet draft 2009/5/1
• 2011年 Android 3.0 “Honeycomb”
• 初のHLSサポート (不安定)
HLSの概念図
MPEG2 TS segment
Playlist (.m3u8)
MPEG2 TS segment
MPEG2 TS segment
MPEG2 ts segment
MPEG2 ts segment
MPEG2 ts segment 動画のエンコード
RTMPなどでサーバに送信
プレイリストの生成
セグメント化
プレイリストの読み込み、
セグメントの読み込みと再生
HLSの構成要素
• MPEG2TS セグメント
MPEG2 Transport Stream形式のコンテナに格納された細切りにされ
た動画データ (ファイル)
コーデックはH.264 (動画) AAC (音声) が標準的
• .m3u8ファイル
セグメントファイルの場所、再生時間、再生順序などを記録したメタ
データファイル
.m3u8ファイル
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:63
#EXT-X-TARGETDURATION:10
#EXTINF:10.000,
livestream-63.ts
#EXTINF:9.999,
livestream-64.ts
#EXTINF:9.999,
livestream-65.ts
#EXTINF:9.999,
livestream-66.ts
セグメントの持続時間
セグメントの場所 (URL)
セグメントの場所 (URL)
セグメントの場所 (URL)
セグメントの場所 (URL)
HLSのしくみ
Segment #1
Playlist (.m3u8)
Segment #2
Segment #3
Segment #2
Playlist (.m3u8)
Segment #3
Segment #4
Segment #1
Segment #1
新しいセグメントの生成
プレイリストの再生成プレイリストの生成
どこかのタイミングでGCされる
HLSの特徴
• プロトコルがシンプル
• ただひたすらファイルをクライアントに送るだけで良い
• キャッシュフレンドリー
• Range requestsをサポートしなくてよい
• セグメントを丸ごとコンテンツキャッシュすればいいのでCDNにおいても扱い
やすい
ご家庭でHLSを始めるには
1. Webサーバを用意します
2. 動画ファイルをセグメントファイルに分割します
3. .m3u8ファイルを作ります
以上
ffmpegでセグメントファイルを作る
$ ffmpeg 
-i "moriyoshi.mp4“ 
-map 0 
-f ssegment 
-vcodec libx264 
-acodec aac -strict experimental 
-segment_list stream.m3u8 
-segment_time 4 
segment-%03d.ts
入力ファイル
入力と出力のマッピング。出力ファイルが2種類以上あるので指定が必須
TSファイルを生成したいのでstream segment 形式を選択
libx264を使ってH.264でエンコードする
音声コーデックはAAC
プレイリスト名
セグメントの持続時間。キーフレームが持続時間
より長い間隔になっているときはそちらが優先され
る。
キーフレームについて
• 動画のストリームにおいて、節目となっていてシークして再生が可能なフレーム
ご家庭でHLSのライブストリーミングを扱う
3つの方法
1. Adobe様のAdobe Media Serverを使う
• http://www.adobe.com/products/adobe-media-server-family.html
• かつてFlash Media Serverとして売っていた製品
• 中身はJava Servlet + Apacheの独自モジュールなのでがっかりしないように
• AWS Marketplaceから簡単に試せます
2. Red5 HLS プラグインを使う
• https://github.com/Red5/red5-hls-plugin
• Red5はJavaで書かれたメディアサーバー
• メンテナンスされていないXugglerというffmpegのラッパーを使っている
ご家庭でHLSのライブストリーミングを扱う
3つの方法
3. nginx-rtmp-moduleを使う
• https://github.com/arut/nginx-rtmp-module
• 設定が簡単 (AMSよりも!)
• Nginxの他のモジュールと合わせて利用できる
• 実績については知らない…
nginx-rtmp-moduleを使う
• コンパイラ、リンカ、PCREとOpenSSLの開発パッケージをインストール
しておく
• OpenRestyを落としてくる
• bundles ディレクトリに nginx-rtmp-module を GitHub から clone する。
ディレクトリ名を nginx-rtmp-module-0 などとする (OpenResty の
configure スクリプトの都合)
• ./configure –prefix={インストール場所} とかやって make && make
install
$ git clone https://github.com/arut/nginx-rtmp-module nginx-rtmp-
module-0
設定例 (RTMP部分)
rtmp {
server {
listen 1935;
access_log /var/log/nginx/rtmp.access.log;
application test {
live on;
hls on;
hls_path /var/lib/nginx/hls/test;
hls_fragment 8;
hls_playlist_length 16;
hls_cleanup on;
}
}
}
設定例 (HLS配信部分)
http {
include mime.types;
…
server {
listen 80;
…
location /.hls {
alias /var/lib/nginx/hls;
add_header Cache-Control no-cache;
}
}
}
http://example.com/.hls/test/{ストリーム名}.m3u8
配信URL
今日やりたくてできなかったこと (懺悔)
• MPEG-DASH
参考資料
• Lucas Gonze: A survey of playlist formats (November 17, 2003)
http://gonze.com/playlists/playlist-format-survey.html
• Michael Simon: The Complete iTunes History -- SoundJam MP to
iTunes 9 (November 09, 2009)
http://www.maclife.com/article/feature/complete_itunes_history_so
undjam_mp_itunes_9
• M3U and PLS Specification
http://forums.winamp.com/showthread.php?threadid=65772
• R. Pantos (Apple, Inc.): HTTP Live Streaming (May 1, 2009)
https://tools.ietf.org/html/draft-pantos-http-live-streaming-00
参考資料
• nginx-rtmp-module directive reference
https://github.com/arut/nginx-rtmp-module/wiki/Directives
ありがとうございました
1 von 24

Recomendados

AbemaTVの動画配信を支えるサーバーサイドシステム von
AbemaTVの動画配信を支えるサーバーサイドシステムAbemaTVの動画配信を支えるサーバーサイドシステム
AbemaTVの動画配信を支えるサーバーサイドシステムyuichiro nakazawa
30.5K views72 Folien
HTML5 + JavaScriptでDRMつきMPEG-DASHを再生させる von
HTML5 + JavaScriptでDRMつきMPEG-DASHを再生させるHTML5 + JavaScriptでDRMつきMPEG-DASHを再生させる
HTML5 + JavaScriptでDRMつきMPEG-DASHを再生させるGaprot
24.5K views42 Folien
TensorFlow Lite Delegateとは? von
TensorFlow Lite Delegateとは?TensorFlow Lite Delegateとは?
TensorFlow Lite Delegateとは?Mr. Vengineer
9.1K views32 Folien
RTMPのはなし - RTMP1.0の仕様とコンセプト / Concepts and Specification of RTMP von
RTMPのはなし - RTMP1.0の仕様とコンセプト / Concepts and Specification of RTMPRTMPのはなし - RTMP1.0の仕様とコンセプト / Concepts and Specification of RTMP
RTMPのはなし - RTMP1.0の仕様とコンセプト / Concepts and Specification of RTMPMasashi Shibata
3K views21 Folien
Tokyo Video Tech #2 動画配信の課題とCMAF活用のメリットデメリット von
Tokyo Video Tech #2 動画配信の課題とCMAF活用のメリットデメリットTokyo Video Tech #2 動画配信の課題とCMAF活用のメリットデメリット
Tokyo Video Tech #2 動画配信の課題とCMAF活用のメリットデメリットMasashi Ito
4.1K views44 Folien
CyberAgentのPrivateCloudeを支えるStorage基盤 von
CyberAgentのPrivateCloudeを支えるStorage基盤CyberAgentのPrivateCloudeを支えるStorage基盤
CyberAgentのPrivateCloudeを支えるStorage基盤Hiroki Chinen
493 views39 Folien

Más contenido relacionado

Was ist angesagt?

テスト文字列に「うんこ」と入れるな von
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなKentaro Matsui
178.4K views16 Folien
インフラエンジニアの綺麗で優しい手順書の書き方 von
インフラエンジニアの綺麗で優しい手順書の書き方インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方Shohei Koyama
145.5K views34 Folien
DockerコンテナでGitを使う von
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使うKazuhiro Suga
18.8K views8 Folien
AWSで作る分析基盤 von
AWSで作る分析基盤AWSで作る分析基盤
AWSで作る分析基盤Yu Otsubo
7.3K views118 Folien
動画配信プラットフォーム on AWS von
動画配信プラットフォーム on AWS動画配信プラットフォーム on AWS
動画配信プラットフォーム on AWSAmazon Web Services Japan
19.2K views40 Folien
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall von
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/FallZabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/FallAtsushi Tanaka
5K views54 Folien

Was ist angesagt?(20)

テスト文字列に「うんこ」と入れるな von Kentaro Matsui
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui178.4K views
インフラエンジニアの綺麗で優しい手順書の書き方 von Shohei Koyama
インフラエンジニアの綺麗で優しい手順書の書き方インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
Shohei Koyama145.5K views
DockerコンテナでGitを使う von Kazuhiro Suga
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga18.8K views
AWSで作る分析基盤 von Yu Otsubo
AWSで作る分析基盤AWSで作る分析基盤
AWSで作る分析基盤
Yu Otsubo7.3K views
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall von Atsushi Tanaka
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/FallZabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Atsushi Tanaka5K views
2015年度GPGPU実践基礎工学 第13回 GPUのメモリ階層 von 智啓 出川
2015年度GPGPU実践基礎工学 第13回 GPUのメモリ階層2015年度GPGPU実践基礎工学 第13回 GPUのメモリ階層
2015年度GPGPU実践基礎工学 第13回 GPUのメモリ階層
智啓 出川1.2K views
AbemaTV が対峙する技術的課題と開発の現場 von Yusuke Goto
AbemaTV が対峙する技術的課題と開発の現場AbemaTV が対峙する技術的課題と開発の現場
AbemaTV が対峙する技術的課題と開発の現場
Yusuke Goto6.2K views
【メタサーベイ】数式ドリブン教師あり学習 von cvpaper. challenge
【メタサーベイ】数式ドリブン教師あり学習【メタサーベイ】数式ドリブン教師あり学習
【メタサーベイ】数式ドリブン教師あり学習
cvpaper. challenge5.9K views
MQTTとAMQPと.NET von terurou
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NET
terurou39.8K views
ロードバランスへの長い道 von Jun Kato
ロードバランスへの長い道ロードバランスへの長い道
ロードバランスへの長い道
Jun Kato13.6K views
目grep入門 +解説 von murachue
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
murachue89.4K views
近年のHierarchical Vision Transformer von Yusuke Uchida
近年のHierarchical Vision Transformer近年のHierarchical Vision Transformer
近年のHierarchical Vision Transformer
Yusuke Uchida13.9K views
5G時代のアプリケーションとは 〜 5G+MECを活用した低遅延アプリの実現へ 〜 von VirtualTech Japan Inc.
5G時代のアプリケーションとは 〜 5G+MECを活用した低遅延アプリの実現へ 〜5G時代のアプリケーションとは 〜 5G+MECを活用した低遅延アプリの実現へ 〜
5G時代のアプリケーションとは 〜 5G+MECを活用した低遅延アプリの実現へ 〜
フロー技術によるネットワーク管理 von Motonori Shindo
フロー技術によるネットワーク管理フロー技術によるネットワーク管理
フロー技術によるネットワーク管理
Motonori Shindo10.7K views
SFUの話 von tnoho
SFUの話SFUの話
SFUの話
tnoho14.3K views
SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】 von DeNA
SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】
SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】
DeNA30.3K views
HTML5時代のネット動画技術〜良い子悪い子普通の子(増補改訂版) von Teiichi Ota
HTML5時代のネット動画技術〜良い子悪い子普通の子(増補改訂版)HTML5時代のネット動画技術〜良い子悪い子普通の子(増補改訂版)
HTML5時代のネット動画技術〜良い子悪い子普通の子(増補改訂版)
Teiichi Ota33.4K views

Destacado

真Drone入門 von
真Drone入門真Drone入門
真Drone入門Yutaka Matsubara
6.7K views33 Folien
The Social-Engineer Village at DEF CON 24 : Does Cultural Differences Become ... von
The Social-Engineer Village at DEF CON 24 : Does Cultural Differences Become ...The Social-Engineer Village at DEF CON 24 : Does Cultural Differences Become ...
The Social-Engineer Village at DEF CON 24 : Does Cultural Differences Become ...Tomohisa Ishikawa, CISSP, CSSLP, CISA, CISM, CFE
2K views64 Folien
ライブストリーミングの基礎知識 von
ライブストリーミングの基礎知識ライブストリーミングの基礎知識
ライブストリーミングの基礎知識kumaryu
47.4K views22 Folien
ストリーミングのげんざい von
ストリーミングのげんざいストリーミングのげんざい
ストリーミングのげんざいTetsuya Morimoto
87.7K views22 Folien
capybara で快適なテスト生活を von
capybara で快適なテスト生活をcapybara で快適なテスト生活を
capybara で快適なテスト生活をRyunosuke SATO
14.7K views44 Folien
OAuth2.0によるWeb APIの保護 von
OAuth2.0によるWeb APIの保護OAuth2.0によるWeb APIの保護
OAuth2.0によるWeb APIの保護Naohiro Fujie
13.7K views60 Folien

Destacado(8)

ライブストリーミングの基礎知識 von kumaryu
ライブストリーミングの基礎知識ライブストリーミングの基礎知識
ライブストリーミングの基礎知識
kumaryu47.4K views
ストリーミングのげんざい von Tetsuya Morimoto
ストリーミングのげんざいストリーミングのげんざい
ストリーミングのげんざい
Tetsuya Morimoto87.7K views
capybara で快適なテスト生活を von Ryunosuke SATO
capybara で快適なテスト生活をcapybara で快適なテスト生活を
capybara で快適なテスト生活を
Ryunosuke SATO14.7K views
OAuth2.0によるWeb APIの保護 von Naohiro Fujie
OAuth2.0によるWeb APIの保護OAuth2.0によるWeb APIの保護
OAuth2.0によるWeb APIの保護
Naohiro Fujie13.7K views
AbemaTV モバイルアプリの開発体制と開発プロセスの話 von Yuji Hato
AbemaTV モバイルアプリの開発体制と開発プロセスの話AbemaTV モバイルアプリの開発体制と開発プロセスの話
AbemaTV モバイルアプリの開発体制と開発プロセスの話
Yuji Hato8.2K views

Más de Moriyoshi Koizumi

Goをカンストさせる話 von
Goをカンストさせる話Goをカンストさせる話
Goをカンストさせる話Moriyoshi Koizumi
6.4K views25 Folien
PHP7を魔改造した話 von
PHP7を魔改造した話PHP7を魔改造した話
PHP7を魔改造した話Moriyoshi Koizumi
2.5K views8 Folien
Authentication, Authorization, OAuth, OpenID Connect and Pyramid von
Authentication, Authorization, OAuth, OpenID Connect and PyramidAuthentication, Authorization, OAuth, OpenID Connect and Pyramid
Authentication, Authorization, OAuth, OpenID Connect and PyramidMoriyoshi Koizumi
1.4K views18 Folien
All I know about rsc.io/c2go von
All I know about rsc.io/c2goAll I know about rsc.io/c2go
All I know about rsc.io/c2goMoriyoshi Koizumi
1.4K views33 Folien
Pyramidのrendererをカスタマイズする von
PyramidのrendererをカスタマイズするPyramidのrendererをカスタマイズする
PyramidのrendererをカスタマイズするMoriyoshi Koizumi
1.8K views10 Folien
Hacking Go Compiler Internals / GoCon 2014 Autumn von
Hacking Go Compiler Internals / GoCon 2014 AutumnHacking Go Compiler Internals / GoCon 2014 Autumn
Hacking Go Compiler Internals / GoCon 2014 AutumnMoriyoshi Koizumi
7.6K views19 Folien

Más de Moriyoshi Koizumi(20)

Authentication, Authorization, OAuth, OpenID Connect and Pyramid von Moriyoshi Koizumi
Authentication, Authorization, OAuth, OpenID Connect and PyramidAuthentication, Authorization, OAuth, OpenID Connect and Pyramid
Authentication, Authorization, OAuth, OpenID Connect and Pyramid
Moriyoshi Koizumi1.4K views
Pyramidのrendererをカスタマイズする von Moriyoshi Koizumi
PyramidのrendererをカスタマイズするPyramidのrendererをカスタマイズする
Pyramidのrendererをカスタマイズする
Moriyoshi Koizumi1.8K views
Hacking Go Compiler Internals / GoCon 2014 Autumn von Moriyoshi Koizumi
Hacking Go Compiler Internals / GoCon 2014 AutumnHacking Go Compiler Internals / GoCon 2014 Autumn
Hacking Go Compiler Internals / GoCon 2014 Autumn
Moriyoshi Koizumi7.6K views
よいことも悪いこともぜんぶPHPが教えてくれた von Moriyoshi Koizumi
よいことも悪いこともぜんぶPHPが教えてくれたよいことも悪いこともぜんぶPHPが教えてくれた
よいことも悪いこともぜんぶPHPが教えてくれた
Moriyoshi Koizumi6.6K views

Último

Najah Matsuo Self Introduction von
Najah Matsuo Self IntroductionNajah Matsuo Self Introduction
Najah Matsuo Self IntroductionNajahMatsuo
10 views29 Folien
SSH超入門 von
SSH超入門SSH超入門
SSH超入門Toru Miyahara
457 views21 Folien
概要.pdf von
概要.pdf概要.pdf
概要.pdfTaira Shimizu
6 views1 Folie
onewedge_companyguide1 von
onewedge_companyguide1onewedge_companyguide1
onewedge_companyguide1ONEWEDGE1
54 views22 Folien
システム概要.pdf von
システム概要.pdfシステム概要.pdf
システム概要.pdfTaira Shimizu
44 views1 Folie
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私 von
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私修治 松浦
208 views36 Folien

Último(6)

Najah Matsuo Self Introduction von NajahMatsuo
Najah Matsuo Self IntroductionNajah Matsuo Self Introduction
Najah Matsuo Self Introduction
NajahMatsuo10 views
onewedge_companyguide1 von ONEWEDGE1
onewedge_companyguide1onewedge_companyguide1
onewedge_companyguide1
ONEWEDGE154 views
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私 von 修治 松浦
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私
修治 松浦208 views

HLSについて知っていることを話します