SlideShare a Scribd company logo
1 of 35
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
Perl で作るメディアストリーミングサーバー
Hideo Kimura
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
アジェンダ
 自己紹介
 ストリーミング技術の種類
 Perl + HTML5 での実装
 まとめ
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
自己紹介
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
自己紹介
 木村秀夫(@hidek)
 株式会社ディー・エヌ・エー
⁃ 技術系執行役員
⁃ Mobage オープンプラットフォーム統括
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
ところで…
 とある転職サイトのインタビューでこんなことを言ってい
た…
 「コードを書かないマネージャーはありえない」
 今、仕事でコード書いてますか?
書いてますか?
書いてますか?
 …すみません
 …っていうか、仕事でコード書いたら怒られます><
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
この人に
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
実際…
 プレイングマネージャー難しい
 局所最適 vs 全体最適
 組織の規模が大きくなればなるほど薄く広く
見なければいけない
 だけどコード書きたい
 ジレンマ…
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
なので…
 家で細々と書いてます
「自分を支える技術」
 で、今回のお題は…
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
今回のお題
 会社で音楽聴きながら仕事したい
 家にある音楽ファイル全部はスマートフォンに入りきらない
 デスクトップもいいけどできればスマートフォンもデバイスとしたい
 そうだ!ストリーミングサーバーを作ろう!
 Perl で書く必要ないけど書きたいから書こう!
 ここまでスピリチュアルな話、こっから趣味の話
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
ストリーミング技術の種類
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
ストリーミングとは
 マルチメディアコンテンツ(映像や音声)をダウンロードしながら再生す
る技術
 ストリーミングを支える技術
⁃ 圧縮 / 転送 / 制御
 圧縮プロトコル
⁃ MPEG-2 / AAC / Vorbis / WM(V|A)
 転送/制御プロトコル
⁃ 独自プロトコル(RTMP/MMS) vs HTTP
 今回のスコープは転送、制御プロトコルをどうするか
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
ストリーミングの種類: TCP/UDP Streaming
 専用プロトコルと専用ソフトを使うことによって実現する
 Adobe:
⁃ RTMP(E/S)
⁃ Flash Player & Flash Media Server
 Microsoft:
⁃ MMS
⁃ Windows Media Player & Windows Media Server
 Perl 実装: Kamaitachi by typester
⁃ FMS の Perl 実装
⁃ AnyEvent
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
ストリーミングの種類: TCP/UDP Streaming (RTMP/MMS)
 Pros:
⁃ ライブ配信ができる
⁃ コンテンツ保護ができる
⁃ マルチビットレート対応ができる
 Cons:
⁃ 専用クライアント・サーバーソフトが必要 = Flash & FMS
 スマートフォンの時代になり iOS で Flash が使えない = 致命傷
⁃ 今回 Kamaitachi を使わない理由の一つ
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
ストリーミングの種類: HTTP Progressive Download
 いわゆる先読みダウンロード
 読み込んだところまでで seek 可能
 Pros:
⁃ HTML5 ブラウザーで再生可能
⁃ HTTPサーバーは特に対応しなくていい
 Cons:
⁃ 開始位置の指定はできない
⁃ ライブストリーミングはできない
⁃ コンテンツ保護はできない
⁃ マルチビットレート対応はできない
 厳密にはストリーミングではない
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
ストリーミングの種類: HTTP Streaming (HLS/HDS)
 メディアファイルを10秒程度の断片と分けてプレイリストで管理する
 Apple: HLS (HTTP Live Streaming)
 Adobe: HDS (HTTP Dynamic Streaming)
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
ストリーミングの種類: HTTP Streaming (HLS/HDS)
 HLS
⁃ Apple が提唱
⁃ IETF で標準化
• http://tools.ietf.org/html/draft-pantos-http-live-streaming-11
⁃ 対応クライアント
• iOS 3.0+
• Android Browser 3.0+
• Flash Player 11+
• QuickTime 10+
⁃ 対応サーバー
• 普通のHTTPサーバー
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
ストリーミングの種類: HTTP Streaming (HLS/HDS)
 サーバーの設定
⁃ mime type の設定を加えるだけ
⁃ Apache だったら
 クライアント
⁃ video タグ
AddType application/x-mpegURL .m3u8
AddType video/MP2T .ts
…
<video width="1280" height="720" src=”playlist.m3u8" …
…
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
ストリーミングの種類: HTTP Streaming (HLS/HDS)
 Pros:
⁃ 多くの HTML5 ブラウザーが対応している
⁃ スマートフォンでも動く
⁃ マルチビットレート対応ができる
⁃ ライブ配信ができる
⁃ HTTPサーバーは mime types の設定のみ
 Cons:
⁃ segmenter などでファイルを分割してプレイリストを用意する必要
がある
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
ストリーミングの種類: HTTP Pseudo-Streaming
 HTTP 1.1 の Range Request と Partial Response を利用した疑似スト
リーミング
 ダウンロード開始位置を byte で指定 (Range Request)
 指定された位置からコンテンツを返す (Partial Response)
 これにより seek が可能
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
ストリーミングの種類: HTTP Pseudo-Streaming
 Range Request
 Partial Response
GET /music.mp3 HTTP/1.1
Host: localhost
Range: bytes=500-999
…
HTTP/1.1 206 Partial Content
Accept-Range: bytes
Content-Length: 500
Content-Range: bytes 500-999/99999
…
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
ストリーミングの種類: HTTP Pseudo-Streaming
 サーバーの設定
⁃ MP4 のストリーミングをする場合にはモジュール組み込みが必要
⁃ Apache: mod_h264_streaming
⁃ lighttpd: mod_h264_streaming
⁃ nginx: http_mp4_module
 クライアント
⁃ video タグ
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
ストリーミングの種類: HTTP Pseudo-Streaming
 Pros:
⁃ HTML5 ブラウザーで再生可能
⁃ スマートフォンでも動く
⁃ 多くのHTTPサーバーはモジュール組み込みで対応できる
 Cons:
⁃ ライブストリーミングはできない
⁃ コンテンツ保護はできない
⁃ マルチビットレート対応はできない
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
ストリーミングの種類
HTTP
TCP/UDP
Progressive Download Pseudo-Streaming HLS/HDS RMTP/MMS
ライブストリーミング × × ○ ○
動的ビットレート × × ○ ○
コンテンツ保護 × × △ ○
ファイルの設置 そのまま置ける そのまま置ける 断片に分割して置く そのまま置ける
シーク位置 最初から バイト単位 断片 + バイト単位 時間単位
クライアントソフト HTML5 ブラウザ Flash / WMP
サーバーソフト HTTP サーバー FMS / WMS
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
今回の要件
 ライブ配信: いらない
 コンテンツ保護: 自分のファイルだからいらない
 マルチビットレート制御: 自宅 or 会社なのでいらない
 コンテンツ: すでにリッピングしてるファイルを使いたい
 HTTP Pseudo-Streaming でよい
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
ストリーミングの種類
HTTP
TCP/UDP
Progressive Download Pseudo-Streaming HLS/HDS RMTP/MMS
ライブストリーミング × × ○ ○
動的ビットレート × × ○ ○
コンテンツ保護 × × △ ○
ファイルの設置 そのまま置ける そのまま置ける 断片に分割して置く そのまま置ける
シーク位置 最初から バイト単位 断片 + バイト単位 時間単位
クライアントソフト HTML5 ブラウザ Flash / WMP
サーバーソフト HTTP サーバー FMS / WMS
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
Perl + HTML5 での実装
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
Perl + HTML5 での実装: Perl
 サーバーサイド
⁃ Partial Response: Plack::Middleware::Static::Range
⁃ by audrey
…
builder {
…
enable 'Plack::Middleware::Static::Range',
path => qr{^(?:/mp3/)},
root => '.';
…
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
Perl + HTML5 での実装: Perl デモ
 Progressive Download
⁃ http://localhost:5000/pd/music.mp3
⁃ すぐ再生はされるけど seek できない
 HTTP Pseudo-Streaming
⁃ http://localhost:5000/hps/music.mp3
⁃ seek できる
 *.mp3 などの mime type が URL に含まれると、ブラウザが勝手にタグ
を描画してくれる
 Plack::Middleware::Static::Range では Accept-Range ヘッダを返し
てないので、一部ブラウザだと動かないかも (ブラウザ実装依存?)
 簡単ですね!
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
Perl + HTML5 での実装: HTML5
 HTML5 クライアント
⁃ video/audio タグでガリガリ書くのしんどい
⁃ jPlayer http://jplayer.org/
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
Perl + HTML5 での実装: HTML5
 jPlayer
⁃ メディアプレイヤー written by JavaScript
⁃ jQuery プラグイン
⁃ js だけではなく swf もついてくる
⁃ skin 対応
$(‘#jp').jPlayer({
ready: function(event){
$(this).jPlayer('setMedia', {
mp3: './mp3/music.mp3',
}).jPlayer('play’);
},
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
Perl + HTML5 での実装: HTML5 デモ
 open demo.htm
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
Perl + HTML5 での実装: その他必要なもの
 Web Application
⁃ 認証
⁃ ファイルブラウジング
⁃ プレイリスト管理
⁃ Amon2
 メディアクローラー
⁃ 指定パス以下の mp3 ファイルを検索してファイルパスとID3タグを
得してデーターベースに保存する
⁃ MP3::Info
 これから!!
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
まとめ
 最近の HTML5 ブラウザはマルチメディア対応が結構充実してるので特
定技術に依存しなくても良さそう
 オンデマンドなコンテンツ配信であれば HTTP Pseudo-Streaming でも
十分実用的
 個人で使うのであれば Perl でも問題ない
 余談
⁃ ビジネスで使う場合には DRM などが問題になりそうなので HLS +
AES
⁃ ライブストリーミングが必要な場合にはノータイムで HLS
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
ホビープログラミング
楽しいですよ!
偉くなったら仕事でコード書かせてもらえなくなるので今のうちですよ
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
Thank you!

More Related Content

What's hot

インターネットにおける動画配信の仕組み
インターネットにおける動画配信の仕組みインターネットにおける動画配信の仕組み
インターネットにおける動画配信の仕組みRyosuke Kubo
 
HLSについて知っていることを話します
HLSについて知っていることを話しますHLSについて知っていることを話します
HLSについて知っていることを話しますMoriyoshi Koizumi
 
動画配信の基礎知識
動画配信の基礎知識動画配信の基礎知識
動画配信の基礎知識Daiyu Hatakeyama
 
WebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample updateWebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample updatemganeko
 
Wowzaを用いた配信基盤 Takusuta tech conf01
Wowzaを用いた配信基盤 Takusuta tech conf01Wowzaを用いた配信基盤 Takusuta tech conf01
Wowzaを用いた配信基盤 Takusuta tech conf01Kazuhiro Ota
 
WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3mganeko
 
Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)
Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)
Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)mganeko
 
HTTP/2 でリバプロするだけでグラフツールを 高速化できた話
HTTP/2 でリバプロするだけでグラフツールを 高速化できた話HTTP/2 でリバプロするだけでグラフツールを 高速化できた話
HTTP/2 でリバプロするだけでグラフツールを 高速化できた話Naotoshi Seo
 
第2回Web技術勉強会 webパフォーマンス改善編
第2回Web技術勉強会 webパフォーマンス改善編第2回Web技術勉強会 webパフォーマンス改善編
第2回Web技術勉強会 webパフォーマンス改善編tzm_freedom
 
aptのマニュアルをpo4a化した話
aptのマニュアルをpo4a化した話aptのマニュアルをpo4a化した話
aptのマニュアルをpo4a化した話Nozomu KURASAWA
 
WebRTC meetup Tokyo 1
WebRTC meetup  Tokyo 1WebRTC meetup  Tokyo 1
WebRTC meetup Tokyo 1mganeko
 
OSC2011 Tokyo/Spring 自宅SAN友の会(前半)
OSC2011 Tokyo/Spring 自宅SAN友の会(前半)OSC2011 Tokyo/Spring 自宅SAN友の会(前半)
OSC2011 Tokyo/Spring 自宅SAN友の会(前半)Satoshi Shimazaki
 
ブラウザでWebRTC - iOSゲートウェイ作ってみた
ブラウザでWebRTC - iOSゲートウェイ作ってみたブラウザでWebRTC - iOSゲートウェイ作ってみた
ブラウザでWebRTC - iOSゲートウェイ作ってみたmganeko
 
20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし
20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし
20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなしTsuyoshi Yamada
 
ほんとはこわくない Gentoo Linux
ほんとはこわくない Gentoo Linuxほんとはこわくない Gentoo Linux
ほんとはこわくない Gentoo Linuxgion_XY
 
Infocom webrtc conference japan
Infocom webrtc conference japanInfocom webrtc conference japan
Infocom webrtc conference japanmganeko
 
H2O - making HTTP better
H2O - making HTTP betterH2O - making HTTP better
H2O - making HTTP betterKazuho Oku
 
WebRTC SFU mediasoup sample
WebRTC SFU mediasoup sampleWebRTC SFU mediasoup sample
WebRTC SFU mediasoup samplemganeko
 
最新Webプロトコル傾向と対策
最新Webプロトコル傾向と対策最新Webプロトコル傾向と対策
最新Webプロトコル傾向と対策Kensaku Komatsu
 

What's hot (20)

インターネットにおける動画配信の仕組み
インターネットにおける動画配信の仕組みインターネットにおける動画配信の仕組み
インターネットにおける動画配信の仕組み
 
HLSについて知っていることを話します
HLSについて知っていることを話しますHLSについて知っていることを話します
HLSについて知っていることを話します
 
動画配信の基礎知識
動画配信の基礎知識動画配信の基礎知識
動画配信の基礎知識
 
WebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample updateWebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample update
 
Wowzaを用いた配信基盤 Takusuta tech conf01
Wowzaを用いた配信基盤 Takusuta tech conf01Wowzaを用いた配信基盤 Takusuta tech conf01
Wowzaを用いた配信基盤 Takusuta tech conf01
 
WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3
 
Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)
Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)
Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)
 
HTTP/2 でリバプロするだけでグラフツールを 高速化できた話
HTTP/2 でリバプロするだけでグラフツールを 高速化できた話HTTP/2 でリバプロするだけでグラフツールを 高速化できた話
HTTP/2 でリバプロするだけでグラフツールを 高速化できた話
 
Lfsをやってみよう
LfsをやってみようLfsをやってみよう
Lfsをやってみよう
 
第2回Web技術勉強会 webパフォーマンス改善編
第2回Web技術勉強会 webパフォーマンス改善編第2回Web技術勉強会 webパフォーマンス改善編
第2回Web技術勉強会 webパフォーマンス改善編
 
aptのマニュアルをpo4a化した話
aptのマニュアルをpo4a化した話aptのマニュアルをpo4a化した話
aptのマニュアルをpo4a化した話
 
WebRTC meetup Tokyo 1
WebRTC meetup  Tokyo 1WebRTC meetup  Tokyo 1
WebRTC meetup Tokyo 1
 
OSC2011 Tokyo/Spring 自宅SAN友の会(前半)
OSC2011 Tokyo/Spring 自宅SAN友の会(前半)OSC2011 Tokyo/Spring 自宅SAN友の会(前半)
OSC2011 Tokyo/Spring 自宅SAN友の会(前半)
 
ブラウザでWebRTC - iOSゲートウェイ作ってみた
ブラウザでWebRTC - iOSゲートウェイ作ってみたブラウザでWebRTC - iOSゲートウェイ作ってみた
ブラウザでWebRTC - iOSゲートウェイ作ってみた
 
20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし
20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし
20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし
 
ほんとはこわくない Gentoo Linux
ほんとはこわくない Gentoo Linuxほんとはこわくない Gentoo Linux
ほんとはこわくない Gentoo Linux
 
Infocom webrtc conference japan
Infocom webrtc conference japanInfocom webrtc conference japan
Infocom webrtc conference japan
 
H2O - making HTTP better
H2O - making HTTP betterH2O - making HTTP better
H2O - making HTTP better
 
WebRTC SFU mediasoup sample
WebRTC SFU mediasoup sampleWebRTC SFU mediasoup sample
WebRTC SFU mediasoup sample
 
最新Webプロトコル傾向と対策
最新Webプロトコル傾向と対策最新Webプロトコル傾向と対策
最新Webプロトコル傾向と対策
 

Viewers also liked

Desperately seeking a lightweight Perl framework
Desperately seeking a lightweight Perl frameworkDesperately seeking a lightweight Perl framework
Desperately seeking a lightweight Perl frameworkPeter Edwards
 
【DevLOVE現場甲子園2014】【守】「テレビ×スマホで視聴者が番組に参加!そのメディア体験を支えるインフラと運用の舞台裏」
【DevLOVE現場甲子園2014】【守】「テレビ×スマホで視聴者が番組に参加!そのメディア体験を支えるインフラと運用の舞台裏」【DevLOVE現場甲子園2014】【守】「テレビ×スマホで視聴者が番組に参加!そのメディア体験を支えるインフラと運用の舞台裏」
【DevLOVE現場甲子園2014】【守】「テレビ×スマホで視聴者が番組に参加!そのメディア体験を支えるインフラと運用の舞台裏」Shinichiro Yoshida
 
リアルタイム通信アプリはつくれる!『Red5 Media Server』の機能と事例のご紹介
リアルタイム通信アプリはつくれる!『Red5 Media Server』の機能と事例のご紹介リアルタイム通信アプリはつくれる!『Red5 Media Server』の機能と事例のご紹介
リアルタイム通信アプリはつくれる!『Red5 Media Server』の機能と事例のご紹介Shinichiro Yoshida
 
Onsen UIでアプリケーション作ってみた
Onsen UIでアプリケーション作ってみたOnsen UIでアプリケーション作ってみた
Onsen UIでアプリケーション作ってみたTakahiro Maki
 
スキスキIonic
スキスキIonicスキスキIonic
スキスキIonicKon Yuichi
 
開発費0円でニコニコ生放送を作ってみた
開発費0円でニコニコ生放送を作ってみた開発費0円でニコニコ生放送を作ってみた
開発費0円でニコニコ生放送を作ってみたYusei Yamanaka
 
Cumiki - エンジニアのための、ちょっといい感じのドキュメント作成ツール
Cumiki - エンジニアのための、ちょっといい感じのドキュメント作成ツールCumiki - エンジニアのための、ちょっといい感じのドキュメント作成ツール
Cumiki - エンジニアのための、ちょっといい感じのドキュメント作成ツールRyo Suzuki
 
初心者エンジニアの システム構築 失敗談
初心者エンジニアの システム構築 失敗談初心者エンジニアの システム構築 失敗談
初心者エンジニアの システム構築 失敗談Makoto Haruyama
 
AngularとOnsen UIで作る最高のHTML5ハイブリッドアプリ
AngularとOnsen UIで作る最高のHTML5ハイブリッドアプリAngularとOnsen UIで作る最高のHTML5ハイブリッドアプリ
AngularとOnsen UIで作る最高のHTML5ハイブリッドアプリアシアル株式会社
 
My sqlのha構成について
My sqlのha構成についてMy sqlのha構成について
My sqlのha構成についてYu Komiya
 
CSS Regionsを使った新しい CSSレイアウトを作る方法
CSS Regionsを使った新しい CSSレイアウトを作る方法CSS Regionsを使った新しい CSSレイアウトを作る方法
CSS Regionsを使った新しい CSSレイアウトを作る方法Keisuke Todoroki
 
設計から実装まで、今すぐ始める高速化
設計から実装まで、今すぐ始める高速化設計から実装まで、今すぐ始める高速化
設計から実装まで、今すぐ始める高速化masaaki komori
 
JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介Yusuke Hirao
 
[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo
[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo
[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyoyoyamasaki
 
「画像をなるべく使わずにWebをレイアウトするテクニック」鷹野 雅弘(スイッチ)
「画像をなるべく使わずにWebをレイアウトするテクニック」鷹野 雅弘(スイッチ)「画像をなるべく使わずにWebをレイアウトするテクニック」鷹野 雅弘(スイッチ)
「画像をなるべく使わずにWebをレイアウトするテクニック」鷹野 雅弘(スイッチ)swwwitch inc.
 
MySQLバックアップの基本
MySQLバックアップの基本MySQLバックアップの基本
MySQLバックアップの基本yoyamasaki
 
今さらだけどMySQLとライセンス
今さらだけどMySQLとライセンス今さらだけどMySQLとライセンス
今さらだけどMySQLとライセンスHidenori Ishii
 
MySQL Index勉強会外部公開用
MySQL Index勉強会外部公開用MySQL Index勉強会外部公開用
MySQL Index勉強会外部公開用CROOZ, inc.
 
Devsの常識、DBAは非常識
Devsの常識、DBAは非常識Devsの常識、DBAは非常識
Devsの常識、DBAは非常識yoku0825
 

Viewers also liked (20)

Desperately seeking a lightweight Perl framework
Desperately seeking a lightweight Perl frameworkDesperately seeking a lightweight Perl framework
Desperately seeking a lightweight Perl framework
 
【DevLOVE現場甲子園2014】【守】「テレビ×スマホで視聴者が番組に参加!そのメディア体験を支えるインフラと運用の舞台裏」
【DevLOVE現場甲子園2014】【守】「テレビ×スマホで視聴者が番組に参加!そのメディア体験を支えるインフラと運用の舞台裏」【DevLOVE現場甲子園2014】【守】「テレビ×スマホで視聴者が番組に参加!そのメディア体験を支えるインフラと運用の舞台裏」
【DevLOVE現場甲子園2014】【守】「テレビ×スマホで視聴者が番組に参加!そのメディア体験を支えるインフラと運用の舞台裏」
 
リアルタイム通信アプリはつくれる!『Red5 Media Server』の機能と事例のご紹介
リアルタイム通信アプリはつくれる!『Red5 Media Server』の機能と事例のご紹介リアルタイム通信アプリはつくれる!『Red5 Media Server』の機能と事例のご紹介
リアルタイム通信アプリはつくれる!『Red5 Media Server』の機能と事例のご紹介
 
Onsen UIでアプリケーション作ってみた
Onsen UIでアプリケーション作ってみたOnsen UIでアプリケーション作ってみた
Onsen UIでアプリケーション作ってみた
 
スキスキIonic
スキスキIonicスキスキIonic
スキスキIonic
 
開発費0円でニコニコ生放送を作ってみた
開発費0円でニコニコ生放送を作ってみた開発費0円でニコニコ生放送を作ってみた
開発費0円でニコニコ生放送を作ってみた
 
Cumiki - エンジニアのための、ちょっといい感じのドキュメント作成ツール
Cumiki - エンジニアのための、ちょっといい感じのドキュメント作成ツールCumiki - エンジニアのための、ちょっといい感じのドキュメント作成ツール
Cumiki - エンジニアのための、ちょっといい感じのドキュメント作成ツール
 
初心者エンジニアの システム構築 失敗談
初心者エンジニアの システム構築 失敗談初心者エンジニアの システム構築 失敗談
初心者エンジニアの システム構築 失敗談
 
AngularとOnsen UIで作る最高のHTML5ハイブリッドアプリ
AngularとOnsen UIで作る最高のHTML5ハイブリッドアプリAngularとOnsen UIで作る最高のHTML5ハイブリッドアプリ
AngularとOnsen UIで作る最高のHTML5ハイブリッドアプリ
 
My sqlのha構成について
My sqlのha構成についてMy sqlのha構成について
My sqlのha構成について
 
CSS Regionsを使った新しい CSSレイアウトを作る方法
CSS Regionsを使った新しい CSSレイアウトを作る方法CSS Regionsを使った新しい CSSレイアウトを作る方法
CSS Regionsを使った新しい CSSレイアウトを作る方法
 
設計から実装まで、今すぐ始める高速化
設計から実装まで、今すぐ始める高速化設計から実装まで、今すぐ始める高速化
設計から実装まで、今すぐ始める高速化
 
JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介
 
MySQLの冗長化 2013-01-24
MySQLの冗長化 2013-01-24MySQLの冗長化 2013-01-24
MySQLの冗長化 2013-01-24
 
[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo
[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo
[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo
 
「画像をなるべく使わずにWebをレイアウトするテクニック」鷹野 雅弘(スイッチ)
「画像をなるべく使わずにWebをレイアウトするテクニック」鷹野 雅弘(スイッチ)「画像をなるべく使わずにWebをレイアウトするテクニック」鷹野 雅弘(スイッチ)
「画像をなるべく使わずにWebをレイアウトするテクニック」鷹野 雅弘(スイッチ)
 
MySQLバックアップの基本
MySQLバックアップの基本MySQLバックアップの基本
MySQLバックアップの基本
 
今さらだけどMySQLとライセンス
今さらだけどMySQLとライセンス今さらだけどMySQLとライセンス
今さらだけどMySQLとライセンス
 
MySQL Index勉強会外部公開用
MySQL Index勉強会外部公開用MySQL Index勉強会外部公開用
MySQL Index勉強会外部公開用
 
Devsの常識、DBAは非常識
Devsの常識、DBAは非常識Devsの常識、DBAは非常識
Devsの常識、DBAは非常識
 

Similar to Perl で作るメディアストリーミングサーバー

インフラエンジニアの楽しい標準化活動
インフラエンジニアの楽しい標準化活動インフラエンジニアの楽しい標準化活動
インフラエンジニアの楽しい標準化活動gree_tech
 
HTTP/2時代のウェブサイト設計
HTTP/2時代のウェブサイト設計HTTP/2時代のウェブサイト設計
HTTP/2時代のウェブサイト設計Kazuho Oku
 
Webページが表示されるまで
Webページが表示されるまでWebページが表示されるまで
Webページが表示されるまでMasataka Suzuki
 
Serf という Orchestration ツール #immutableinfra
Serf という Orchestration ツール #immutableinfraSerf という Orchestration ツール #immutableinfra
Serf という Orchestration ツール #immutableinfraNaotoshi Seo
 
HTTPとサーバ技術の最新動向
HTTPとサーバ技術の最新動向HTTPとサーバ技術の最新動向
HTTPとサーバ技術の最新動向Kazuho Oku
 
HTML5 VIDEO on Chromecast
HTML5 VIDEO on ChromecastHTML5 VIDEO on Chromecast
HTML5 VIDEO on ChromecastKatsumi Onishi
 
ドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkinsドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkinsGo Sueyoshi (a.k.a sue445)
 
Automation with SoftLayer and Zabbix
Automation with SoftLayer and ZabbixAutomation with SoftLayer and Zabbix
Automation with SoftLayer and Zabbixsoftlayerjp
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割Toru Yamaguchi
 
C++ AMPを使ってみよう
C++ AMPを使ってみようC++ AMPを使ってみよう
C++ AMPを使ってみようOsamu Masutani
 
プライベートクラウド作ってみました
プライベートクラウド作ってみましたプライベートクラウド作ってみました
プライベートクラウド作ってみましたKoji Hasebe
 
ソーシャルアプリを分析してみた
ソーシャルアプリを分析してみたソーシャルアプリを分析してみた
ソーシャルアプリを分析してみたDrecom Co., Ltd.
 
オブジェクトストレージを使ってイメージビューアを作ってみる
オブジェクトストレージを使ってイメージビューアを作ってみるオブジェクトストレージを使ってイメージビューアを作ってみる
オブジェクトストレージを使ってイメージビューアを作ってみるHironobu Saitoh
 
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)Toshiharu Sugiyama
 
DEV-019_Programmable Video ~Azure Media Services でのビデオ サービス開発~
DEV-019_Programmable Video ~Azure Media Services でのビデオ サービス開発~DEV-019_Programmable Video ~Azure Media Services でのビデオ サービス開発~
DEV-019_Programmable Video ~Azure Media Services でのビデオ サービス開発~decode2016
 
Adobe Primetime:プレミアム動画配信事業者のための「次世代TV」収益最大化ソリューション(サブスクリプション&動画広告)
Adobe Primetime:プレミアム動画配信事業者のための「次世代TV」収益最大化ソリューション(サブスクリプション&動画広告)Adobe Primetime:プレミアム動画配信事業者のための「次世代TV」収益最大化ソリューション(サブスクリプション&動画広告)
Adobe Primetime:プレミアム動画配信事業者のための「次世代TV」収益最大化ソリューション(サブスクリプション&動画広告)Teiichi Ota
 
CDNの仕組み(JANOG36)
CDNの仕組み(JANOG36)CDNの仕組み(JANOG36)
CDNの仕組み(JANOG36)J-Stream Inc.
 
ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先Kazuho Oku
 

Similar to Perl で作るメディアストリーミングサーバー (20)

インフラエンジニアの楽しい標準化活動
インフラエンジニアの楽しい標準化活動インフラエンジニアの楽しい標準化活動
インフラエンジニアの楽しい標準化活動
 
HTTP/2時代のウェブサイト設計
HTTP/2時代のウェブサイト設計HTTP/2時代のウェブサイト設計
HTTP/2時代のウェブサイト設計
 
Webページが表示されるまで
Webページが表示されるまでWebページが表示されるまで
Webページが表示されるまで
 
Serf という Orchestration ツール #immutableinfra
Serf という Orchestration ツール #immutableinfraSerf という Orchestration ツール #immutableinfra
Serf という Orchestration ツール #immutableinfra
 
HTTPとサーバ技術の最新動向
HTTPとサーバ技術の最新動向HTTPとサーバ技術の最新動向
HTTPとサーバ技術の最新動向
 
HTML5 VIDEO on Chromecast
HTML5 VIDEO on ChromecastHTML5 VIDEO on Chromecast
HTML5 VIDEO on Chromecast
 
ドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkinsドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkins
 
Automation with SoftLayer and Zabbix
Automation with SoftLayer and ZabbixAutomation with SoftLayer and Zabbix
Automation with SoftLayer and Zabbix
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
 
C++ AMPを使ってみよう
C++ AMPを使ってみようC++ AMPを使ってみよう
C++ AMPを使ってみよう
 
プライベートクラウド作ってみました
プライベートクラウド作ってみましたプライベートクラウド作ってみました
プライベートクラウド作ってみました
 
ソーシャルアプリを分析してみた
ソーシャルアプリを分析してみたソーシャルアプリを分析してみた
ソーシャルアプリを分析してみた
 
オブジェクトストレージを使ってイメージビューアを作ってみる
オブジェクトストレージを使ってイメージビューアを作ってみるオブジェクトストレージを使ってイメージビューアを作ってみる
オブジェクトストレージを使ってイメージビューアを作ってみる
 
Ietf95 http2
Ietf95 http2Ietf95 http2
Ietf95 http2
 
Hadoop ~Yahoo! JAPANの活用について~
Hadoop ~Yahoo! JAPANの活用について~Hadoop ~Yahoo! JAPANの活用について~
Hadoop ~Yahoo! JAPANの活用について~
 
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)
 
DEV-019_Programmable Video ~Azure Media Services でのビデオ サービス開発~
DEV-019_Programmable Video ~Azure Media Services でのビデオ サービス開発~DEV-019_Programmable Video ~Azure Media Services でのビデオ サービス開発~
DEV-019_Programmable Video ~Azure Media Services でのビデオ サービス開発~
 
Adobe Primetime:プレミアム動画配信事業者のための「次世代TV」収益最大化ソリューション(サブスクリプション&動画広告)
Adobe Primetime:プレミアム動画配信事業者のための「次世代TV」収益最大化ソリューション(サブスクリプション&動画広告)Adobe Primetime:プレミアム動画配信事業者のための「次世代TV」収益最大化ソリューション(サブスクリプション&動画広告)
Adobe Primetime:プレミアム動画配信事業者のための「次世代TV」収益最大化ソリューション(サブスクリプション&動画広告)
 
CDNの仕組み(JANOG36)
CDNの仕組み(JANOG36)CDNの仕組み(JANOG36)
CDNの仕組み(JANOG36)
 
ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
 

More from Hideo Kimura

エンジニアリング組織の設計と実践〜merpayの事例から学ぶ、組織とアーキテクトの関係性〜
エンジニアリング組織の設計と実践〜merpayの事例から学ぶ、組織とアーキテクトの関係性〜エンジニアリング組織の設計と実践〜merpayの事例から学ぶ、組織とアーキテクトの関係性〜
エンジニアリング組織の設計と実践〜merpayの事例から学ぶ、組織とアーキテクトの関係性〜Hideo Kimura
 
Webエンジニアが学ぶ自動運転を支える技術
Webエンジニアが学ぶ自動運転を支える技術Webエンジニアが学ぶ自動運転を支える技術
Webエンジニアが学ぶ自動運転を支える技術Hideo Kimura
 
Inside Of Mbga Open Platform
Inside Of Mbga Open PlatformInside Of Mbga Open Platform
Inside Of Mbga Open PlatformHideo Kimura
 
Benchmarks of Perl Web Application Frameworks
Benchmarks of Perl Web Application FrameworksBenchmarks of Perl Web Application Frameworks
Benchmarks of Perl Web Application FrameworksHideo Kimura
 
CGI::Application::Dispatch
CGI::Application::DispatchCGI::Application::Dispatch
CGI::Application::DispatchHideo Kimura
 
Mastering CGI::Application
Mastering CGI::ApplicationMastering CGI::Application
Mastering CGI::ApplicationHideo Kimura
 
Play With Theschwartz
Play With TheschwartzPlay With Theschwartz
Play With TheschwartzHideo Kimura
 
Catalyst::Model::Adaptor
Catalyst::Model::AdaptorCatalyst::Model::Adaptor
Catalyst::Model::AdaptorHideo Kimura
 

More from Hideo Kimura (9)

エンジニアリング組織の設計と実践〜merpayの事例から学ぶ、組織とアーキテクトの関係性〜
エンジニアリング組織の設計と実践〜merpayの事例から学ぶ、組織とアーキテクトの関係性〜エンジニアリング組織の設計と実践〜merpayの事例から学ぶ、組織とアーキテクトの関係性〜
エンジニアリング組織の設計と実践〜merpayの事例から学ぶ、組織とアーキテクトの関係性〜
 
Webエンジニアが学ぶ自動運転を支える技術
Webエンジニアが学ぶ自動運転を支える技術Webエンジニアが学ぶ自動運転を支える技術
Webエンジニアが学ぶ自動運転を支える技術
 
Inside Of Mbga Open Platform
Inside Of Mbga Open PlatformInside Of Mbga Open Platform
Inside Of Mbga Open Platform
 
Modern Catalyst
Modern  CatalystModern  Catalyst
Modern Catalyst
 
Benchmarks of Perl Web Application Frameworks
Benchmarks of Perl Web Application FrameworksBenchmarks of Perl Web Application Frameworks
Benchmarks of Perl Web Application Frameworks
 
CGI::Application::Dispatch
CGI::Application::DispatchCGI::Application::Dispatch
CGI::Application::Dispatch
 
Mastering CGI::Application
Mastering CGI::ApplicationMastering CGI::Application
Mastering CGI::Application
 
Play With Theschwartz
Play With TheschwartzPlay With Theschwartz
Play With Theschwartz
 
Catalyst::Model::Adaptor
Catalyst::Model::AdaptorCatalyst::Model::Adaptor
Catalyst::Model::Adaptor
 

Recently uploaded

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 

Recently uploaded (7)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 

Perl で作るメディアストリーミングサーバー

  • 1. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. Perl で作るメディアストリーミングサーバー Hideo Kimura
  • 2. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. アジェンダ  自己紹介  ストリーミング技術の種類  Perl + HTML5 での実装  まとめ
  • 3. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. 自己紹介
  • 4. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. 自己紹介  木村秀夫(@hidek)  株式会社ディー・エヌ・エー ⁃ 技術系執行役員 ⁃ Mobage オープンプラットフォーム統括
  • 5. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. ところで…  とある転職サイトのインタビューでこんなことを言ってい た…  「コードを書かないマネージャーはありえない」  今、仕事でコード書いてますか? 書いてますか? 書いてますか?  …すみません  …っていうか、仕事でコード書いたら怒られます><
  • 6. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. この人に
  • 7. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. 実際…  プレイングマネージャー難しい  局所最適 vs 全体最適  組織の規模が大きくなればなるほど薄く広く 見なければいけない  だけどコード書きたい  ジレンマ…
  • 8. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. なので…  家で細々と書いてます 「自分を支える技術」  で、今回のお題は…
  • 9. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. 今回のお題  会社で音楽聴きながら仕事したい  家にある音楽ファイル全部はスマートフォンに入りきらない  デスクトップもいいけどできればスマートフォンもデバイスとしたい  そうだ!ストリーミングサーバーを作ろう!  Perl で書く必要ないけど書きたいから書こう!  ここまでスピリチュアルな話、こっから趣味の話
  • 10. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. ストリーミング技術の種類
  • 11. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. ストリーミングとは  マルチメディアコンテンツ(映像や音声)をダウンロードしながら再生す る技術  ストリーミングを支える技術 ⁃ 圧縮 / 転送 / 制御  圧縮プロトコル ⁃ MPEG-2 / AAC / Vorbis / WM(V|A)  転送/制御プロトコル ⁃ 独自プロトコル(RTMP/MMS) vs HTTP  今回のスコープは転送、制御プロトコルをどうするか
  • 12. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. ストリーミングの種類: TCP/UDP Streaming  専用プロトコルと専用ソフトを使うことによって実現する  Adobe: ⁃ RTMP(E/S) ⁃ Flash Player & Flash Media Server  Microsoft: ⁃ MMS ⁃ Windows Media Player & Windows Media Server  Perl 実装: Kamaitachi by typester ⁃ FMS の Perl 実装 ⁃ AnyEvent
  • 13. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. ストリーミングの種類: TCP/UDP Streaming (RTMP/MMS)  Pros: ⁃ ライブ配信ができる ⁃ コンテンツ保護ができる ⁃ マルチビットレート対応ができる  Cons: ⁃ 専用クライアント・サーバーソフトが必要 = Flash & FMS  スマートフォンの時代になり iOS で Flash が使えない = 致命傷 ⁃ 今回 Kamaitachi を使わない理由の一つ
  • 14. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. ストリーミングの種類: HTTP Progressive Download  いわゆる先読みダウンロード  読み込んだところまでで seek 可能  Pros: ⁃ HTML5 ブラウザーで再生可能 ⁃ HTTPサーバーは特に対応しなくていい  Cons: ⁃ 開始位置の指定はできない ⁃ ライブストリーミングはできない ⁃ コンテンツ保護はできない ⁃ マルチビットレート対応はできない  厳密にはストリーミングではない
  • 15. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. ストリーミングの種類: HTTP Streaming (HLS/HDS)  メディアファイルを10秒程度の断片と分けてプレイリストで管理する  Apple: HLS (HTTP Live Streaming)  Adobe: HDS (HTTP Dynamic Streaming)
  • 16. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. ストリーミングの種類: HTTP Streaming (HLS/HDS)  HLS ⁃ Apple が提唱 ⁃ IETF で標準化 • http://tools.ietf.org/html/draft-pantos-http-live-streaming-11 ⁃ 対応クライアント • iOS 3.0+ • Android Browser 3.0+ • Flash Player 11+ • QuickTime 10+ ⁃ 対応サーバー • 普通のHTTPサーバー
  • 17. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. ストリーミングの種類: HTTP Streaming (HLS/HDS)  サーバーの設定 ⁃ mime type の設定を加えるだけ ⁃ Apache だったら  クライアント ⁃ video タグ AddType application/x-mpegURL .m3u8 AddType video/MP2T .ts … <video width="1280" height="720" src=”playlist.m3u8" … …
  • 18. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. ストリーミングの種類: HTTP Streaming (HLS/HDS)  Pros: ⁃ 多くの HTML5 ブラウザーが対応している ⁃ スマートフォンでも動く ⁃ マルチビットレート対応ができる ⁃ ライブ配信ができる ⁃ HTTPサーバーは mime types の設定のみ  Cons: ⁃ segmenter などでファイルを分割してプレイリストを用意する必要 がある
  • 19. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. ストリーミングの種類: HTTP Pseudo-Streaming  HTTP 1.1 の Range Request と Partial Response を利用した疑似スト リーミング  ダウンロード開始位置を byte で指定 (Range Request)  指定された位置からコンテンツを返す (Partial Response)  これにより seek が可能
  • 20. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. ストリーミングの種類: HTTP Pseudo-Streaming  Range Request  Partial Response GET /music.mp3 HTTP/1.1 Host: localhost Range: bytes=500-999 … HTTP/1.1 206 Partial Content Accept-Range: bytes Content-Length: 500 Content-Range: bytes 500-999/99999 …
  • 21. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. ストリーミングの種類: HTTP Pseudo-Streaming  サーバーの設定 ⁃ MP4 のストリーミングをする場合にはモジュール組み込みが必要 ⁃ Apache: mod_h264_streaming ⁃ lighttpd: mod_h264_streaming ⁃ nginx: http_mp4_module  クライアント ⁃ video タグ
  • 22. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. ストリーミングの種類: HTTP Pseudo-Streaming  Pros: ⁃ HTML5 ブラウザーで再生可能 ⁃ スマートフォンでも動く ⁃ 多くのHTTPサーバーはモジュール組み込みで対応できる  Cons: ⁃ ライブストリーミングはできない ⁃ コンテンツ保護はできない ⁃ マルチビットレート対応はできない
  • 23. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. ストリーミングの種類 HTTP TCP/UDP Progressive Download Pseudo-Streaming HLS/HDS RMTP/MMS ライブストリーミング × × ○ ○ 動的ビットレート × × ○ ○ コンテンツ保護 × × △ ○ ファイルの設置 そのまま置ける そのまま置ける 断片に分割して置く そのまま置ける シーク位置 最初から バイト単位 断片 + バイト単位 時間単位 クライアントソフト HTML5 ブラウザ Flash / WMP サーバーソフト HTTP サーバー FMS / WMS
  • 24. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. 今回の要件  ライブ配信: いらない  コンテンツ保護: 自分のファイルだからいらない  マルチビットレート制御: 自宅 or 会社なのでいらない  コンテンツ: すでにリッピングしてるファイルを使いたい  HTTP Pseudo-Streaming でよい
  • 25. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. ストリーミングの種類 HTTP TCP/UDP Progressive Download Pseudo-Streaming HLS/HDS RMTP/MMS ライブストリーミング × × ○ ○ 動的ビットレート × × ○ ○ コンテンツ保護 × × △ ○ ファイルの設置 そのまま置ける そのまま置ける 断片に分割して置く そのまま置ける シーク位置 最初から バイト単位 断片 + バイト単位 時間単位 クライアントソフト HTML5 ブラウザ Flash / WMP サーバーソフト HTTP サーバー FMS / WMS
  • 26. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. Perl + HTML5 での実装
  • 27. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. Perl + HTML5 での実装: Perl  サーバーサイド ⁃ Partial Response: Plack::Middleware::Static::Range ⁃ by audrey … builder { … enable 'Plack::Middleware::Static::Range', path => qr{^(?:/mp3/)}, root => '.'; …
  • 28. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. Perl + HTML5 での実装: Perl デモ  Progressive Download ⁃ http://localhost:5000/pd/music.mp3 ⁃ すぐ再生はされるけど seek できない  HTTP Pseudo-Streaming ⁃ http://localhost:5000/hps/music.mp3 ⁃ seek できる  *.mp3 などの mime type が URL に含まれると、ブラウザが勝手にタグ を描画してくれる  Plack::Middleware::Static::Range では Accept-Range ヘッダを返し てないので、一部ブラウザだと動かないかも (ブラウザ実装依存?)  簡単ですね!
  • 29. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. Perl + HTML5 での実装: HTML5  HTML5 クライアント ⁃ video/audio タグでガリガリ書くのしんどい ⁃ jPlayer http://jplayer.org/
  • 30. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. Perl + HTML5 での実装: HTML5  jPlayer ⁃ メディアプレイヤー written by JavaScript ⁃ jQuery プラグイン ⁃ js だけではなく swf もついてくる ⁃ skin 対応 $(‘#jp').jPlayer({ ready: function(event){ $(this).jPlayer('setMedia', { mp3: './mp3/music.mp3', }).jPlayer('play’); },
  • 31. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. Perl + HTML5 での実装: HTML5 デモ  open demo.htm
  • 32. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. Perl + HTML5 での実装: その他必要なもの  Web Application ⁃ 認証 ⁃ ファイルブラウジング ⁃ プレイリスト管理 ⁃ Amon2  メディアクローラー ⁃ 指定パス以下の mp3 ファイルを検索してファイルパスとID3タグを 得してデーターベースに保存する ⁃ MP3::Info  これから!!
  • 33. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. まとめ  最近の HTML5 ブラウザはマルチメディア対応が結構充実してるので特 定技術に依存しなくても良さそう  オンデマンドなコンテンツ配信であれば HTTP Pseudo-Streaming でも 十分実用的  個人で使うのであれば Perl でも問題ない  余談 ⁃ ビジネスで使う場合には DRM などが問題になりそうなので HLS + AES ⁃ ライブストリーミングが必要な場合にはノータイムで HLS
  • 34. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. ホビープログラミング 楽しいですよ! 偉くなったら仕事でコード書かせてもらえなくなるので今のうちですよ
  • 35. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. Thank you!