ストリーミングの仕組みについて勉強したいので調べてみました。

ストリーミングプロトコルの種類

HLS (HTTP Live Streaming)

.m3u8のプレイリストと.tsというセグメントファイルで構成される。

m3u8でtsの順番を指定。


MPEG-DASH

.mpdのプレイリストと.m4sまたは.tsというセグメントファイル。


MSE (Media Source Extensions)

MPDというXMLファイルに情報が書かれており、セグメントはバイナリファイル。


実際のサイトでは

ニコニコ動画

ニコニコ動画の動画を再生するとm3u8とtsファイルがダウンロードされるため、HLSを採用していることがわかる。

ニコ生

m3u8とmp4だが、mp4はそのままでは再生できない。

YouTube

videoplaybackとかいうセグメントファイルらしきものがダウンロードされているが、プレイリストが見当たらなく、videoplaybackもそのままでは再生できないため形式がよくわからない。

追記:
動画はmp4、音声はweba。
最初以外単体で再生できないのはヘッダーが最初のセグメントにしか存在しないため。

YouTube Live

videoplaybackというセグメントファイル。
動画と音声が別々であり、動画はwebm、音声はm4a。

ツイッター

ツイッター上の動画はm3u8とm4sだがm4sはそのままでは再生できない。

ツイキャス

viewer?token=で始まる配信のタイトルやカテゴリーが書かれたデータが送られてくる。しかし動画の本体のデータが見当たらない。
その代わりコンソールにllfmp4 player is enabled. と表記されていた。
llfmp4で検索すると、
pythonのコードが見つかった。
これを読み取れれば理解が深まりそう。

少し読んでみるとwss:とかいうプロトコルのURLがあった。
これにブラウザからアクセスしてもアクセスできなかった。
調べてみるとwebsocketのsecure版らしい。
Devtoolsをよく見てみるとWSという分類があり、そこのfmp4のメッセージにバイナリメッセージが連なっていた。
サイトによってデータのやり取りに特徴があって面白い。

TikTok

?a=から始まるファイルだがmime_type=video_mp4とあり、mp4である。

TikTok Live

?aidというidに関するデータとbatch/というデータが送られてくる。
tiktok githubで検索すると解析しているコードが見つかった。
githubのコードを読んで勉強する!

少し読んでみるとなんかflvファイルのあるリンクを作っているらしい?
あんまよくわからなかったけれど、ツイキャスを踏まえてdevtoolsで見るとやっぱりwebsocketだった。
websocketとか使ったことがないから、今度なにかに使ってみたい。

radiko

aacがある。

参考