SlideShare a Scribd company logo
1 of 16
Download to read offline
ビデオプレイヤーと
バックエンドのMQTT接続
リアルタイム視聴解析と両方向通信
2018年4月25日
鍋島 公章
1Copyright (c) kosho.org
• 視聴解析:盛り上がってきてる
• QoE (Quality of Experiment)競争:VoD会社の差別化要因
• 最低でも秒単位(望ましくは0.1秒単位)の視聴解析:短尺の動画広告
• ビッグデータ解析:CRM、DMP(Data Management Platform)連携
• 解析サービス・プロダクト:いまいち
• プレイヤーの内部イベント:詳しい情報は取れない、標準化もまだ
• デファクト的な解析サービス:まだ無し、Adobe Analytics、ベンチャー各社
• OTT各社:作りこんだシステムを利用
• 汎用解析系:IoTを代表に盛り上がってる
• プロトコル:MQTT、CoAP、AMQP
• ブローカー:Mosquitto、AWS IoT Core、Azure IoT Hub
• リアルタイム解析:Spark、 SAQL
• ビジネスインテリジェンス:いろいろ
ストリーミングの視聴解析
2
Copyright (c) kosho.org
• ビデオプレイヤーの内部イベントを、汎用解析系に入れてみた
• HTML 5 Video + Paho MQTT + Azure IoT Hub + SAQL + Power BI
• デモPlayer
Copyright (c) kosho.org
3
本日のライトニング・トーク
https://tech.jstream.jp/analytics/seminar02/play-sub.php
メッセージ表示あり版
Power BI
• HTML 5 Video
ビデオプレイヤーの内部イベント
イベント 概要 イベント 概要
play 再生開始(キック) ratechange 再生速度(倍速再生等)変更
waiting 再生可能を待つ volumechange 音量変更
playing 再生開始(実効) emptied メディアバッファが空
timeupdate 再生位置変更(再生中) resize 画面サイズ取得済
seeking シーク中 durationchange コンテンツ長取得済
seeked シーク終了 loadedmetadata メタ情報取得済
pause 停止 loadeddata 再生可能(次のフレーム)
ended 再生終了 canplay 再生可能(先送り可能)
abort ダウンロード失敗(取得中止) canplaythrough 再生可能(バッファリングなし連続)
stalled ダウンロードできない(取得継続) loadstart 読み込みを開始
error エラー発生 progress メディアダウンロード中
suspend メディアダウンロードがアイドル
4
Copyright (c) kosho.org
• 内部イベントに対する処理割り当て
<video id="myvideo" controls preload="none" width=320 height=240>
<source src=“jst.mp4" type='video/mp4' > </video>
var $myPlayer = document.getElementById("myvideo");
$eventArray = [ "abort","canplay","canplaythrough","durationchange","emptied",
"ended","error","loadeddata","loadedmetadata","loadstart","pause","play",
"playing","progress","ratechange","resize","seeked","seeking","stalled",
"suspend","timeupdate","volumechange","waiting"]
for ($key in $eventArray) {
$myPlayer.addEventListener($eventArray[$key],
$.proxy(eventHandler, this,$eventArray[$key]));
} Copyright (c) kosho.org
5
プレイヤー処理
イベント名リスト
処理割り当て
• プロトコル
• プロトコルフォーマット:軽量
Copyright (c) kosho.org
6
MQTT (Message Queueing Telemetry Transport)
MQTTコントロール
MQTTコントロール
固定(2バイト)ヘッダ
ペイロード
MQTTセッション
可変ヘッダ
グループ コントロール 概要
セッション管理
CONNECT 接続要求
CONNACK 接続確認応答
DISCONNECT クライアント切断
Publish
PUBLISH パブリッシュ
PUBACK パブリッシュ確認
PUBREC パブリッシュ受信
PUBREL パブリッシュのリリース
PUBCOMP パブリッシュ完了
Subscribe
SUBSCRIBE サブスクライブ
SUBACK サブスクライブ確認
UNSUBSCRIBE アンサブスクライブ
UNSUBACK アンサブスクライブ確認
PING
PINGREQ Ping要求
PUGRESP Ping確認
• Publish/Subscribe
• 両方法通信
• トピック志向
データ集計(視聴解析) 一斉通知(メッセージ送信)
Copyright (c) kosho.org
7
Pub/Sub
①Subscribe②Publish
トピック
ブローカー
①Subscribe ②Publish
トピック
ブローカー
• REST API+HTTP
• リソース名=URI
Copyright (c) kosho.org
8
対比:REST HTTP
操作 HTTPメソッド
リソース作成 POST
リソース削除 DELETE
データ取得 GET
データ更新 PUT
課題①:一方向性(クライアン
トからのリクエストのみ)
課題②:プロトコルの重さ
HTTPリクエスト
HTTPレスポンス
PUT /data/mydata1.jsp HTTP/1.1
Host: example.jp
User-Agent: Mozilla/5.0 (compatible; ;…
Accept: image/gif, image/x-xbitmap, i,…
Accept-Language: ja
Accept-Encoding: gzip, deflate
Content-Length: 11
Connection: Keep-Alive
Hello World
HTTP/1.1 200 OK
Date: Thu, 26 Oct 2000 16:51:49
Server: Apache/1.3.14 (Unix)
• Azureによる解析環境
Azure ビッグデータ
HTML5
Video
Player
IoT
Hub
Streaming
Analytics
Job
Device
Explorer
SQL
Server
Power
BI
Storage
ブローカー
リアルタイム
処理 (SAQL)
生データ保存
簡易グラフ
ビジネス
インテリジェンス
データベース
9
Copyright (c) kosho.org
Time
Series
Insight
簡易管理
MQTT
over Websocket
over TLS
• 役割
• デバイスからのメッセージを受け取り、バックエンド(解析系)に引き渡す
• 一般的なMQTTブローカーとの違い
• 全デバイス(プレイヤー)に対する認証が必要
• UIDの使いまわしはできない:前の接続は強制接続
• 認証:SAS (Shared Access Signature)、全デバイス共用SASは使える
• サンプルプログラム
• cl01~cl49までのUIDを用意し、各接続に割り当て
• uid-cl.php
• デバイス間のメッセージ交換はできない
• D2C (Device to Cloud)とC2D (Cloud to Device)
• クラウドからデバイスへの一斉配信はできず、個別送信のみ可能
• サンプルプログラム
• サーバ側で接続されているUIDを検索し、それぞれに対しメッセージを個別送信
• send-c2d.js
Copyright (c) kosho.org
10
Azure IoT Hub
• プレイヤー設定
• プレイヤーからのビーコン送信
• message.destinationName = "devices/all/messages/events/";
• クラウドからのメッセージ受信
• client.subscribe("devices/"+$uid+"/messages/devicebound/#");
• クラウド設定
• ビーコン受信
• 自動的に全ビーコンがStream Analytics Jobに投げ込まれる
• メッセージ送信
• serviceClient.send(uid, message,printResultFor('send'));
Copyright (c) kosho.org
11
Azure IoT Hub
• SAQL (Stream Analytics Query Language)によるリアルタイム処理
• SQLに時間論理を追加
• タイムスタンプ
• TimeStamp by:タイムスタンプの指定
• EventProcessedUtcTime
• EventEnqueuedUtcTime
• グループ化(期間指定)
• TumblingWindow:ウィンドウが固定(例:10秒)、かぶりなし
• HoppingWindow:ウィンドウ(例:10秒)が指定された時間(例:5秒)で移動、かぶりあり
• SlidingWindow:ウィンドウ(例:10秒)がデータの発生消滅に合わせて移動、かぶりあり
• 関数
• ISFIRST:最初かどうか
• LAG:前回の値
• LAST:最後の値
• TopOne:トップ1件
• CollectTop:トップX件
Copyright (c) kosho.org
12
Stream Analytics Job
• 単位時間に集計したイベント別の意味合い
• 行動解析
• timeupdate:同時視聴数(視聴しているユーザ数)
• play:再生を開始したユーザ数
• pause:ポーズしたユーザ数(再生終了を含む)
• ended:再生を終了したユーザ数
• QoE解析
• waiting:帯域がぎりぎりのユーザ数(再生開始時のwaitingを含む)
• stalled:バッファリングが発生したユーザ数
• error:プレイヤーエラーのユーザ数
Copyright (c) kosho.org
13
SAQL解析:イベントの意味合い
• 同時視聴数
• アルゴリズム
• 単位時間(1分間)内に発生した”timeupdate”をUID別に数え上げる
• SAQL
SELECT count(distinct uid) as u_count, System.Timestamp as time
INTO [kosho-output4]
FROM [kosho-input2] timestamp by EventEnqueuedUtcTime
WHERE eventName = ‘timeupdate’
GROUP BY TumblingWindow(minute,1)
• 出力
{"u_count":1,"time":"2018-01-25T02:19:00.0000000Z"}
{"u_count":3,"time":"2018-01-25T02:20:00.0000000Z”}
{“u_count”:6,”time”:”2018-01-25T02:21:00.0000000Z"}
Copyright (c) kosho.org
14
SAQL解析:サンプル
• ビジネスインテリジェンス
• 各種グラフ、解析
Power BI
15
Copyright (c) kosho.org
• ビデオ視聴解析勉強会
• https://video-analytics.connpass.com/
• 定期的に勉強会を開催します
• 内容
• 解析系プロダクトの紹介
• 解析サービス、プレイヤー向けSDK
• 規格・標準
• ITU-T QoE標準(IPTV向け)
• P.1201.1、P.1201.2、P.1202.1、P.1202.2
• W3C Web Performance Working Group
• 視聴解析の手法
• クラスタ分析/RFM分析、チャーン分析、ABC分析、アソシエーション分析
• KPI(認知、検討、行動)、属性分析、DMP連携分析、パス解析、アトリビューション分析
おわりに
16
Copyright (c) kosho.org

More Related Content

What's hot

[DI12] あらゆるデータをビジネスに活用! Azure Data Lake を中心としたビックデータ処理基盤のアーキテクチャと実装
[DI12] あらゆるデータをビジネスに活用! Azure Data Lake を中心としたビックデータ処理基盤のアーキテクチャと実装[DI12] あらゆるデータをビジネスに活用! Azure Data Lake を中心としたビックデータ処理基盤のアーキテクチャと実装
[DI12] あらゆるデータをビジネスに活用! Azure Data Lake を中心としたビックデータ処理基盤のアーキテクチャと実装
de:code 2017
 

What's hot (20)

SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
 
Apache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once SemanticsApache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once Semantics
 
Hyperledger Fabric Private Chaincodeについて
Hyperledger Fabric Private ChaincodeについてHyperledger Fabric Private Chaincodeについて
Hyperledger Fabric Private Chaincodeについて
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
 
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
 
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
 
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込む45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
 
Keycloakの最近のトピック
Keycloakの最近のトピックKeycloakの最近のトピック
Keycloakの最近のトピック
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
 
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
 
大量のデータ処理や分析に使えるOSS Apache Spark入門 - Open Source Conference2020 Online/Fukuoka...
大量のデータ処理や分析に使えるOSS Apache Spark入門 - Open Source Conference2020 Online/Fukuoka...大量のデータ処理や分析に使えるOSS Apache Spark入門 - Open Source Conference2020 Online/Fukuoka...
大量のデータ処理や分析に使えるOSS Apache Spark入門 - Open Source Conference2020 Online/Fukuoka...
 
BigQuery で 150万円 使ったときの話
BigQuery で 150万円 使ったときの話BigQuery で 150万円 使ったときの話
BigQuery で 150万円 使ったときの話
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
 
35歳でDBAになった私がデータベースを壊して学んだこと
35歳でDBAになった私がデータベースを壊して学んだこと35歳でDBAになった私がデータベースを壊して学んだこと
35歳でDBAになった私がデータベースを壊して学んだこと
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
[DI12] あらゆるデータをビジネスに活用! Azure Data Lake を中心としたビックデータ処理基盤のアーキテクチャと実装
[DI12] あらゆるデータをビジネスに活用! Azure Data Lake を中心としたビックデータ処理基盤のアーキテクチャと実装[DI12] あらゆるデータをビジネスに活用! Azure Data Lake を中心としたビックデータ処理基盤のアーキテクチャと実装
[DI12] あらゆるデータをビジネスに活用! Azure Data Lake を中心としたビックデータ処理基盤のアーキテクチャと実装
 

Similar to Video mqtt

Nedo講座・rtmセミナー
Nedo講座・rtmセミナーNedo講座・rtmセミナー
Nedo講座・rtmセミナー
openrtm
 
Windows Azure for PHP Developers
Windows Azure for PHP DevelopersWindows Azure for PHP Developers
Windows Azure for PHP Developers
fumios
 

Similar to Video mqtt (20)

Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)
Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)
Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)
 
BitVisor Summit 2 「BitVisorの現状と今後」
BitVisor Summit 2 「BitVisorの現状と今後」BitVisor Summit 2 「BitVisorの現状と今後」
BitVisor Summit 2 「BitVisorの現状と今後」
 
Azure Media Services 概要
Azure Media Services 概要Azure Media Services 概要
Azure Media Services 概要
 
AzureとDatadogとこれからのモニタリング - Next Gen Monitoring with Azure and Datadog 20180922
AzureとDatadogとこれからのモニタリング - Next Gen Monitoring with Azure and Datadog 20180922AzureとDatadogとこれからのモニタリング - Next Gen Monitoring with Azure and Datadog 20180922
AzureとDatadogとこれからのモニタリング - Next Gen Monitoring with Azure and Datadog 20180922
 
Logにまつわるエトセトラ
LogにまつわるエトセトラLogにまつわるエトセトラ
Logにまつわるエトセトラ
 
HCL Sametime V12 概要
HCL Sametime V12 概要HCL Sametime V12 概要
HCL Sametime V12 概要
 
D1-2-OS2_オンプレミスのVMワークロードをGCPへ移行する
D1-2-OS2_オンプレミスのVMワークロードをGCPへ移行するD1-2-OS2_オンプレミスのVMワークロードをGCPへ移行する
D1-2-OS2_オンプレミスのVMワークロードをGCPへ移行する
 
ストリーミング視聴解析の基礎セミナー(続き)
ストリーミング視聴解析の基礎セミナー(続き)ストリーミング視聴解析の基礎セミナー(続き)
ストリーミング視聴解析の基礎セミナー(続き)
 
Html5j 8
Html5j 8Html5j 8
Html5j 8
 
Microsoft Intelligent Edge Technologies
Microsoft Intelligent Edge TechnologiesMicrosoft Intelligent Edge Technologies
Microsoft Intelligent Edge Technologies
 
Magic Leap で WebRTC 触ってみた
Magic Leap で WebRTC 触ってみたMagic Leap で WebRTC 触ってみた
Magic Leap で WebRTC 触ってみた
 
第21回「Windows Server 2012 DeepDive!! Hyper-V と VDI を徹底解説」(2012/10/18 on しすなま!)...
第21回「Windows Server 2012 DeepDive!! Hyper-V と VDI を徹底解説」(2012/10/18 on しすなま!)...第21回「Windows Server 2012 DeepDive!! Hyper-V と VDI を徹底解説」(2012/10/18 on しすなま!)...
第21回「Windows Server 2012 DeepDive!! Hyper-V と VDI を徹底解説」(2012/10/18 on しすなま!)...
 
1.コース概要
1.コース概要1.コース概要
1.コース概要
 
ロボット管理プラットフォーム「 RoboticBase 」の紹介
ロボット管理プラットフォーム「 RoboticBase 」の紹介ロボット管理プラットフォーム「 RoboticBase 」の紹介
ロボット管理プラットフォーム「 RoboticBase 」の紹介
 
JCBの Payment as a Service 実現にむけたゼロベースの組織変革とテクニカル・イネーブラー(NTTデータ テクノロジーカンファレンス ...
JCBの Payment as a Service 実現にむけたゼロベースの組織変革とテクニカル・イネーブラー(NTTデータ テクノロジーカンファレンス ...JCBの Payment as a Service 実現にむけたゼロベースの組織変革とテクニカル・イネーブラー(NTTデータ テクノロジーカンファレンス ...
JCBの Payment as a Service 実現にむけたゼロベースの組織変革とテクニカル・イネーブラー(NTTデータ テクノロジーカンファレンス ...
 
Nedo講座・rtmセミナー
Nedo講座・rtmセミナーNedo講座・rtmセミナー
Nedo講座・rtmセミナー
 
local launch small language model of AI.
local launch small language model of AI.local launch small language model of AI.
local launch small language model of AI.
 
Hyperledger Fabric 1.0 概要
Hyperledger Fabric 1.0 概要Hyperledger Fabric 1.0 概要
Hyperledger Fabric 1.0 概要
 
OSC 2012 Microsoft Session [マイクロソフトの魅せるセンサー×クラウド技術]
OSC 2012 Microsoft Session [マイクロソフトの魅せるセンサー×クラウド技術]OSC 2012 Microsoft Session [マイクロソフトの魅せるセンサー×クラウド技術]
OSC 2012 Microsoft Session [マイクロソフトの魅せるセンサー×クラウド技術]
 
Windows Azure for PHP Developers
Windows Azure for PHP DevelopersWindows Azure for PHP Developers
Windows Azure for PHP Developers
 

More from Masaaki Nabeshima

More from Masaaki Nabeshima (20)

vMVPDの動向について
vMVPDの動向についてvMVPDの動向について
vMVPDの動向について
 
Open Caching Update
Open Caching UpdateOpen Caching Update
Open Caching Update
 
ストリーミングサービス研究グループ
ストリーミングサービス研究グループストリーミングサービス研究グループ
ストリーミングサービス研究グループ
 
通信と放送の融合を考えるBoF 5
通信と放送の融合を考えるBoF 5通信と放送の融合を考えるBoF 5
通信と放送の融合を考えるBoF 5
 
セキュリティ管理 入門セミナ
セキュリティ管理 入門セミナセキュリティ管理 入門セミナ
セキュリティ管理 入門セミナ
 
ATSC 3.0, MMT, Multicast
ATSC 3.0, MMT, MulticastATSC 3.0, MMT, Multicast
ATSC 3.0, MMT, Multicast
 
IPv4 IPv6 Multi Protocol Media Player
IPv4 IPv6 Multi  Protocol Media PlayerIPv4 IPv6 Multi  Protocol Media Player
IPv4 IPv6 Multi Protocol Media Player
 
国内トラフィックエンジニアリングの現状
国内トラフィックエンジニアリングの現状国内トラフィックエンジニアリングの現状
国内トラフィックエンジニアリングの現状
 
サイマルキャスト コストと可能性についての考察
サイマルキャスト コストと可能性についての考察サイマルキャスト コストと可能性についての考察
サイマルキャスト コストと可能性についての考察
 
ストリーミング視聴解析の基本とその応用 IPv4・IPv6デュアルソース
ストリーミング視聴解析の基本とその応用 IPv4・IPv6デュアルソースストリーミング視聴解析の基本とその応用 IPv4・IPv6デュアルソース
ストリーミング視聴解析の基本とその応用 IPv4・IPv6デュアルソース
 
IPv4 IPv6 Media Player
IPv4 IPv6 Media PlayerIPv4 IPv6 Media Player
IPv4 IPv6 Media Player
 
IPv6 Survey 2019 Dec Update
IPv6 Survey 2019 Dec UpdateIPv6 Survey 2019 Dec Update
IPv6 Survey 2019 Dec Update
 
JP Web Sites IPv6 Survey
JP Web Sites IPv6 SurveyJP Web Sites IPv6 Survey
JP Web Sites IPv6 Survey
 
IPv6 Survey 2019
IPv6 Survey 2019IPv6 Survey 2019
IPv6 Survey 2019
 
海賊版対策:CDN事業者からの視点
海賊版対策:CDN事業者からの視点海賊版対策:CDN事業者からの視点
海賊版対策:CDN事業者からの視点
 
ストリーミング視聴解析の分類(ドラフト20180718)
ストリーミング視聴解析の分類(ドラフト20180718)ストリーミング視聴解析の分類(ドラフト20180718)
ストリーミング視聴解析の分類(ドラフト20180718)
 
ストリーミング用マルチCDN
ストリーミング用マルチCDNストリーミング用マルチCDN
ストリーミング用マルチCDN
 
ISP CDN draft2
ISP CDN draft2ISP CDN draft2
ISP CDN draft2
 
プレイヤーサイド・マルチCDN
プレイヤーサイド・マルチCDNプレイヤーサイド・マルチCDN
プレイヤーサイド・マルチCDN
 
Video analytics seminar 2018
Video analytics seminar 2018Video analytics seminar 2018
Video analytics seminar 2018
 

Video mqtt

  • 2. • 視聴解析:盛り上がってきてる • QoE (Quality of Experiment)競争:VoD会社の差別化要因 • 最低でも秒単位(望ましくは0.1秒単位)の視聴解析:短尺の動画広告 • ビッグデータ解析:CRM、DMP(Data Management Platform)連携 • 解析サービス・プロダクト:いまいち • プレイヤーの内部イベント:詳しい情報は取れない、標準化もまだ • デファクト的な解析サービス:まだ無し、Adobe Analytics、ベンチャー各社 • OTT各社:作りこんだシステムを利用 • 汎用解析系:IoTを代表に盛り上がってる • プロトコル:MQTT、CoAP、AMQP • ブローカー:Mosquitto、AWS IoT Core、Azure IoT Hub • リアルタイム解析:Spark、 SAQL • ビジネスインテリジェンス:いろいろ ストリーミングの視聴解析 2 Copyright (c) kosho.org
  • 3. • ビデオプレイヤーの内部イベントを、汎用解析系に入れてみた • HTML 5 Video + Paho MQTT + Azure IoT Hub + SAQL + Power BI • デモPlayer Copyright (c) kosho.org 3 本日のライトニング・トーク https://tech.jstream.jp/analytics/seminar02/play-sub.php メッセージ表示あり版 Power BI
  • 4. • HTML 5 Video ビデオプレイヤーの内部イベント イベント 概要 イベント 概要 play 再生開始(キック) ratechange 再生速度(倍速再生等)変更 waiting 再生可能を待つ volumechange 音量変更 playing 再生開始(実効) emptied メディアバッファが空 timeupdate 再生位置変更(再生中) resize 画面サイズ取得済 seeking シーク中 durationchange コンテンツ長取得済 seeked シーク終了 loadedmetadata メタ情報取得済 pause 停止 loadeddata 再生可能(次のフレーム) ended 再生終了 canplay 再生可能(先送り可能) abort ダウンロード失敗(取得中止) canplaythrough 再生可能(バッファリングなし連続) stalled ダウンロードできない(取得継続) loadstart 読み込みを開始 error エラー発生 progress メディアダウンロード中 suspend メディアダウンロードがアイドル 4 Copyright (c) kosho.org
  • 5. • 内部イベントに対する処理割り当て <video id="myvideo" controls preload="none" width=320 height=240> <source src=“jst.mp4" type='video/mp4' > </video> var $myPlayer = document.getElementById("myvideo"); $eventArray = [ "abort","canplay","canplaythrough","durationchange","emptied", "ended","error","loadeddata","loadedmetadata","loadstart","pause","play", "playing","progress","ratechange","resize","seeked","seeking","stalled", "suspend","timeupdate","volumechange","waiting"] for ($key in $eventArray) { $myPlayer.addEventListener($eventArray[$key], $.proxy(eventHandler, this,$eventArray[$key])); } Copyright (c) kosho.org 5 プレイヤー処理 イベント名リスト 処理割り当て
  • 6. • プロトコル • プロトコルフォーマット:軽量 Copyright (c) kosho.org 6 MQTT (Message Queueing Telemetry Transport) MQTTコントロール MQTTコントロール 固定(2バイト)ヘッダ ペイロード MQTTセッション 可変ヘッダ グループ コントロール 概要 セッション管理 CONNECT 接続要求 CONNACK 接続確認応答 DISCONNECT クライアント切断 Publish PUBLISH パブリッシュ PUBACK パブリッシュ確認 PUBREC パブリッシュ受信 PUBREL パブリッシュのリリース PUBCOMP パブリッシュ完了 Subscribe SUBSCRIBE サブスクライブ SUBACK サブスクライブ確認 UNSUBSCRIBE アンサブスクライブ UNSUBACK アンサブスクライブ確認 PING PINGREQ Ping要求 PUGRESP Ping確認
  • 7. • Publish/Subscribe • 両方法通信 • トピック志向 データ集計(視聴解析) 一斉通知(メッセージ送信) Copyright (c) kosho.org 7 Pub/Sub ①Subscribe②Publish トピック ブローカー ①Subscribe ②Publish トピック ブローカー
  • 8. • REST API+HTTP • リソース名=URI Copyright (c) kosho.org 8 対比:REST HTTP 操作 HTTPメソッド リソース作成 POST リソース削除 DELETE データ取得 GET データ更新 PUT 課題①:一方向性(クライアン トからのリクエストのみ) 課題②:プロトコルの重さ HTTPリクエスト HTTPレスポンス PUT /data/mydata1.jsp HTTP/1.1 Host: example.jp User-Agent: Mozilla/5.0 (compatible; ;… Accept: image/gif, image/x-xbitmap, i,… Accept-Language: ja Accept-Encoding: gzip, deflate Content-Length: 11 Connection: Keep-Alive Hello World HTTP/1.1 200 OK Date: Thu, 26 Oct 2000 16:51:49 Server: Apache/1.3.14 (Unix)
  • 9. • Azureによる解析環境 Azure ビッグデータ HTML5 Video Player IoT Hub Streaming Analytics Job Device Explorer SQL Server Power BI Storage ブローカー リアルタイム 処理 (SAQL) 生データ保存 簡易グラフ ビジネス インテリジェンス データベース 9 Copyright (c) kosho.org Time Series Insight 簡易管理 MQTT over Websocket over TLS
  • 10. • 役割 • デバイスからのメッセージを受け取り、バックエンド(解析系)に引き渡す • 一般的なMQTTブローカーとの違い • 全デバイス(プレイヤー)に対する認証が必要 • UIDの使いまわしはできない:前の接続は強制接続 • 認証:SAS (Shared Access Signature)、全デバイス共用SASは使える • サンプルプログラム • cl01~cl49までのUIDを用意し、各接続に割り当て • uid-cl.php • デバイス間のメッセージ交換はできない • D2C (Device to Cloud)とC2D (Cloud to Device) • クラウドからデバイスへの一斉配信はできず、個別送信のみ可能 • サンプルプログラム • サーバ側で接続されているUIDを検索し、それぞれに対しメッセージを個別送信 • send-c2d.js Copyright (c) kosho.org 10 Azure IoT Hub
  • 11. • プレイヤー設定 • プレイヤーからのビーコン送信 • message.destinationName = "devices/all/messages/events/"; • クラウドからのメッセージ受信 • client.subscribe("devices/"+$uid+"/messages/devicebound/#"); • クラウド設定 • ビーコン受信 • 自動的に全ビーコンがStream Analytics Jobに投げ込まれる • メッセージ送信 • serviceClient.send(uid, message,printResultFor('send')); Copyright (c) kosho.org 11 Azure IoT Hub
  • 12. • SAQL (Stream Analytics Query Language)によるリアルタイム処理 • SQLに時間論理を追加 • タイムスタンプ • TimeStamp by:タイムスタンプの指定 • EventProcessedUtcTime • EventEnqueuedUtcTime • グループ化(期間指定) • TumblingWindow:ウィンドウが固定(例:10秒)、かぶりなし • HoppingWindow:ウィンドウ(例:10秒)が指定された時間(例:5秒)で移動、かぶりあり • SlidingWindow:ウィンドウ(例:10秒)がデータの発生消滅に合わせて移動、かぶりあり • 関数 • ISFIRST:最初かどうか • LAG:前回の値 • LAST:最後の値 • TopOne:トップ1件 • CollectTop:トップX件 Copyright (c) kosho.org 12 Stream Analytics Job
  • 13. • 単位時間に集計したイベント別の意味合い • 行動解析 • timeupdate:同時視聴数(視聴しているユーザ数) • play:再生を開始したユーザ数 • pause:ポーズしたユーザ数(再生終了を含む) • ended:再生を終了したユーザ数 • QoE解析 • waiting:帯域がぎりぎりのユーザ数(再生開始時のwaitingを含む) • stalled:バッファリングが発生したユーザ数 • error:プレイヤーエラーのユーザ数 Copyright (c) kosho.org 13 SAQL解析:イベントの意味合い
  • 14. • 同時視聴数 • アルゴリズム • 単位時間(1分間)内に発生した”timeupdate”をUID別に数え上げる • SAQL SELECT count(distinct uid) as u_count, System.Timestamp as time INTO [kosho-output4] FROM [kosho-input2] timestamp by EventEnqueuedUtcTime WHERE eventName = ‘timeupdate’ GROUP BY TumblingWindow(minute,1) • 出力 {"u_count":1,"time":"2018-01-25T02:19:00.0000000Z"} {"u_count":3,"time":"2018-01-25T02:20:00.0000000Z”} {“u_count”:6,”time”:”2018-01-25T02:21:00.0000000Z"} Copyright (c) kosho.org 14 SAQL解析:サンプル
  • 16. • ビデオ視聴解析勉強会 • https://video-analytics.connpass.com/ • 定期的に勉強会を開催します • 内容 • 解析系プロダクトの紹介 • 解析サービス、プレイヤー向けSDK • 規格・標準 • ITU-T QoE標準(IPTV向け) • P.1201.1、P.1201.2、P.1202.1、P.1202.2 • W3C Web Performance Working Group • 視聴解析の手法 • クラスタ分析/RFM分析、チャーン分析、ABC分析、アソシエーション分析 • KPI(認知、検討、行動)、属性分析、DMP連携分析、パス解析、アトリビューション分析 おわりに 16 Copyright (c) kosho.org