Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

27,607 views

Published on

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

Published in: Engineering
  • Be the first to comment

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

  1. 1. HLSについて私が知っている ことを話します moriyoshi
  2. 2. 自己紹介 •ffmpeg大好き •ffmpegが好きすぎてパッチを投げたがMichael Niedermayerにマサカリを投げ返された https://lists.ffmpeg.org/pipermail/ffmpeg-devel/2006- December/008978.html
  3. 3. HLSとは • HTTP Live Streaming の略 • ざっくり言うと、HTTPを使って一般的なインターネットラジオと同じ要 領で動画を配信する技術 • 2009年にAppleがiOS3に初めて搭載した。 • IETF Internet Draft • Androidなどでのサポートもあり、モバイルデバイスではデファクトの ストリーミング方式となっている
  4. 4. おっさんのためのHLSの歴史 • 1997年 Winamp登場 • プレイリストとしての .m3u 形式の誕生 • 1998年9月 Winamp2 登場 • プレイリストとしての .pls 形式が登場 • 1998年 SHOUTcast 誕生 • 動的年末なプレイリスト生成による簡易ストリーミング
  5. 5. おっさんのためのHLSの歴史 • 1999年 SoundJam MP • MacOS9用の mp3 プレイヤー • Stream playback capability • 2000年 Apple が SoundJamMP 開発元の Casady & Greene, Inc. 買収 • 2001年1月 iTunes 1.0 • SoundJam MPがベース
  6. 6. おっさんのためのHLSの歴史 • 2009年 iOS 3 • HLS のサポート • first internet draft 2009/5/1 • 2011年 Android 3.0 “Honeycomb” • 初のHLSサポート (不安定)
  7. 7. HLSの概念図 MPEG2 TS segment Playlist (.m3u8) MPEG2 TS segment MPEG2 TS segment MPEG2 ts segment MPEG2 ts segment MPEG2 ts segment 動画のエンコード RTMPなどでサーバに送信 プレイリストの生成 セグメント化 プレイリストの読み込み、 セグメントの読み込みと再生
  8. 8. HLSの構成要素 • MPEG2TS セグメント MPEG2 Transport Stream形式のコンテナに格納された細切りにされ た動画データ (ファイル) コーデックはH.264 (動画) AAC (音声) が標準的 • .m3u8ファイル セグメントファイルの場所、再生時間、再生順序などを記録したメタ データファイル
  9. 9. .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)
  10. 10. HLSのしくみ Segment #1 Playlist (.m3u8) Segment #2 Segment #3 Segment #2 Playlist (.m3u8) Segment #3 Segment #4 Segment #1 Segment #1 新しいセグメントの生成 プレイリストの再生成プレイリストの生成 どこかのタイミングでGCされる
  11. 11. HLSの特徴 • プロトコルがシンプル • ただひたすらファイルをクライアントに送るだけで良い • キャッシュフレンドリー • Range requestsをサポートしなくてよい • セグメントを丸ごとコンテンツキャッシュすればいいのでCDNにおいても扱い やすい
  12. 12. ご家庭でHLSを始めるには 1. Webサーバを用意します 2. 動画ファイルをセグメントファイルに分割します 3. .m3u8ファイルを作ります
  13. 13. 以上
  14. 14. 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 プレイリスト名 セグメントの持続時間。キーフレームが持続時間 より長い間隔になっているときはそちらが優先され る。
  15. 15. キーフレームについて • 動画のストリームにおいて、節目となっていてシークして再生が可能なフレーム
  16. 16. ご家庭で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のラッパーを使っている
  17. 17. ご家庭でHLSのライブストリーミングを扱う 3つの方法 3. nginx-rtmp-moduleを使う • https://github.com/arut/nginx-rtmp-module • 設定が簡単 (AMSよりも!) • Nginxの他のモジュールと合わせて利用できる • 実績については知らない…
  18. 18. 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
  19. 19. 設定例 (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; } } }
  20. 20. 設定例 (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
  21. 21. 今日やりたくてできなかったこと (懺悔) • MPEG-DASH
  22. 22. 参考資料 • 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
  23. 23. 参考資料 • nginx-rtmp-module directive reference https://github.com/arut/nginx-rtmp-module/wiki/Directives
  24. 24. ありがとうございました

×