HLS 配信¶
重要
このドキュメントに書かれている FFmpeg に関する事柄についてはサポート対象外ですのでご注意ください
警告
このドキュメントはとても古いため参考程度にしてください
概要¶
Sora の RTP 転送 API と FFmpeg を利用することで、HTTP Live Streaming(以下 HLS)で配信できます。
おすすめ¶
WebRTC to HLS は大変なので、是非サービスをご検討ください。
検証したバージョン¶
警告
このドキュメントで確認している FFmpeg のバージョンはかなり古いため参考程度にしてください
- FFmpeg のバージョン:
3.3.3
配信例¶
下記の例では、RTP 転送 API の応答で送られてきた SDP を FFmpeg に読み込ませることで、 Sora から送られてきた RTP パケットを受信して H.264/MP3 の TS ファイルで出力しています。
配信時は、この時同時に作成/更新されているプレイリスト(m3u8 ファイル)を TS ファイルと一緒に Web サーバーで公開します。
変換例:
#!/bin/bash
CHANNEL_ID=sora
CONNECTION_ID=WHSSBG91XS7NXEVYY0F51YFEEW
VIDEO_PORT=60001
# VIDEO_PORT + 1 は RTCP の待ち受けで使用されるため空けておく
# また、AUDIO_PORT + 1 も RTCP の待ち受けで使用される
AUDIO_PORT=$(( $VIDEO_PORT + 2 ))
VIDEO_CODEC=libx264
AUDIO_CODEC=libmp3lame
QUEUE_SIZE=4000
start_forwarding_rtp() {
data=$( jq -n -c --arg channel_id $CHANNEL_ID --arg connection_id $CONNECTION_ID \
--argjson video_port $VIDEO_PORT \
--argjson audio_port $AUDIO_PORT \
'{"channel_id":$channel_id, "connection_id":$connection_id, "ip_address":"127.0.0.1", "video_port":$video_port, "audio_port":$audio_port}' )
http POST 127.0.0.1:3000 \
x-sora-target:Sora_20170814.StartForwardingRtp \
<<< $data
}
json=$( start_forwarding_rtp )
sdp=$( echo $json | jq -r .sdp )
echo "$sdp" | ffmpeg \
-loglevel fatal \
-protocol_whitelist file,rtp,udp,pipe \
-i pipe:0 \
-c:v $VIDEO_CODEC \
-c:a $AUDIO_CODEC \
-map 0 \
-flags -global_header \
-max_muxing_queue_size $QUEUE_SIZE \
-f hls \
-hls_segment_type mpegts \
-hls_flags append_list \
-hls_list_size 0 \
-hls_segment_filename index%d.ts \
index.m3u8
ブラウザにアクセスさせる HTML の video タグにはプレイリストを指定します。
例:
<html>
<head>
<title>HLS</title>
</head>
<body>
<div>
<video src="index.m3u8" controls />
</div>
<body>
</html>