Cloud Recording SDKの録画モードは2種類あります。
(左側)チャネルにuid1とuid2が入室し、録画を実施
(中央)録画後、各uidの音声、映像を4セット生成
(右側)マージ処理により、mp4(2ファイル)が生成
各uidに対し音声と映像がそれぞれ作成されます。
図の例のように2名の場合は4つになります。
m3u8とtsファイルで1セットです。
Individualモードの場合は、1つのuidで音声、映像の2セット作成されます。
各uidの音声、映像ファイルを別々に持つことで、
後で自由に映像を作ることができます。
例えば、オンラインレッスンで、1名の先生、複数の生徒がいる場合、
後で先生と生徒1名ごとの映像を全生徒分作成し配布することができます。
Individualモードで別々に保存された各uidの音声、映像ファイルを1ファイルにマージすることができます。
図の例のようにマージ処理によりmp4ファイルが作成されます。
※マージ方法については「トランスコード環境」を参照
(左側)チャネルにuid1とuid2が入室し、録画を実施
(中央)録画後、全uidの音声、映像が結合されたものを1セット生成
(右側)コンバート処理により、mp4ファイルに変換
全uidの音声、映像が結合されたものが作成されます。
m3u8とts/webm
※詳細はIndividualモードの「ファイル形式」を参照してください。
Compositeモードの場合は、1セットのみ作成されます。
Compositeモードのメリットは2つあります。
などに適しています。
必要に応じて作成された録画ファイルをコンバートすることができます。
図の例ではmp4ファイルに変換しています。
※コンバート方法については「トランスコード環境」を参照
各モード毎に動作確認をしてみます。
下記環境をご準備ください。
$mode = 'individual';
※Channel名はparams.phpの$cnameで指定した値になります。
ブラウザ上に以下のようなレスポンスが表示されます。
{"resourceId":"IL0B7AstDJPJLomAtRqYZ(省略)jC3bVHSX885c0AW7PG4p0Wsufq"}
acquireコールにてresourceIdが発行されていることがわかります。
$resourceid = "IL0B7AstDJPJLomAtRqYZ(省略)jC3bVHSX885c0AW7PG4p0Wsufq";
ブラウザ上に以下のようなレスポンスが表示されます。
{"resourceId":"IL0B7AstDJPJLomAtRqYZ(省略)jC3bVHSX885c0AW7PG4p0Wsufq",
"sid":"5a0ae8c8374aab7fe1110993b205eae5"}"
startコールにて録画が開始され、sidが発行されています。
$sid = '5a0ae8c8374aab7fe1110993b205eae5';
ブラウザ上に以下のレスポンスが表示されます。
{"resourceId":"IL0B7AstDJPJLomAtRqYZ(省略)jC3bVHSX885c0AW7PG4p0Wsufq",
"sid":"5a0ae8c8374aab7fe1110993b205eae5",
"serverResponse":{
"fileListMode":"string",
"fileList":"directory1/directory2/5a0ae8c8374aab7fe1110993b205eae5_demo__uid_s_2262050709__uid_e_audio.m3u8",
"uploadingStatus":"uploaded"}
}"
/*省略*/
stopコールにて録画が停止し、結果(serverResponse)が表示されています。
※保存されるファイルは複数個あるため、実際は上記のレスポンスが複数個出力されます。
Individualモードの通り、各uidの音声、映像が別々に保存されていることが分かります。
5a0ae8c8374aab7fe1110993b205eae5_demo__uid_s_2262050709__uid_e_audio.m3u8
5a0ae8c8374aab7fe1110993b205eae5_demo__uid_s_2262050709__uid_e_audio_20200519064015088.ts
5a0ae8c8374aab7fe1110993b205eae5_demo__uid_s_2262050709__uid_e_audio_20200519064030098.ts
5a0ae8c8374aab7fe1110993b205eae5_demo__uid_s_2262050709__uid_e_audio_20200519064045118.ts
5a0ae8c8374aab7fe1110993b205eae5_demo__uid_s_2262050709__uid_e_audio_20200519064100138.ts
5a0ae8c8374aab7fe1110993b205eae5_demo__uid_s_2262050709__uid_e_video.m3u8
5a0ae8c8374aab7fe1110993b205eae5_demo__uid_s_2262050709__uid_e_video_20200519064015115.ts
5a0ae8c8374aab7fe1110993b205eae5_demo__uid_s_2262050709__uid_e_video_20200519064030543.ts
5a0ae8c8374aab7fe1110993b205eae5_demo__uid_s_2262050709__uid_e_video_20200519064045751.ts
5a0ae8c8374aab7fe1110993b205eae5_demo__uid_s_2262050709__uid_e_video_20200519064101695.ts
5a0ae8c8374aab7fe1110993b205eae5_demo__uid_s_547851663__uid_e_audio.m3u8
5a0ae8c8374aab7fe1110993b205eae5_demo__uid_s_547851663__uid_e_audio_20200519064018868.ts
5a0ae8c8374aab7fe1110993b205eae5_demo__uid_s_547851663__uid_e_audio_20200519064033878.ts
5a0ae8c8374aab7fe1110993b205eae5_demo__uid_s_547851663__uid_e_audio_20200519064048898.ts
5a0ae8c8374aab7fe1110993b205eae5_demo__uid_s_547851663__uid_e_audio_20200519064103918.ts
5a0ae8c8374aab7fe1110993b205eae5_demo__uid_s_547851663__uid_e_video.m3u8
5a0ae8c8374aab7fe1110993b205eae5_demo__uid_s_547851663__uid_e_video_20200519064018999.ts
5a0ae8c8374aab7fe1110993b205eae5_demo__uid_s_547851663__uid_e_video_20200519064034129.ts
5a0ae8c8374aab7fe1110993b205eae5_demo__uid_s_547851663__uid_e_video_20200519064049318.ts
5a0ae8c8374aab7fe1110993b205eae5_demo__uid_s_547851663__uid_e_video_20200519064105302.ts
(トランスコード環境にコピー後)マージスクリプトを実行します。
python convert.py -f /home/individual -m 0 -p 30 -r 640 360
詳細はトランスコード環境を参照
uid(547851663)とuid(2262050709)の2名のmp4が作られています。
2262050709_0_merge_av.mp4
547851663_0_merge_av.mp4
※映像は一部隠しています。
Individualモードでの録画実施と映像の確認ができました。
$mode = 'mix';
※Channel名はparams.phpの$cnameで指定した値になります。
1名用レイアウトから2名用レイアウトに変更します。
(注)レイアウト更新時に解像度の変更はできません。
2名入室状態になります。
{
/*省略*/
"serverResponse":{
"status": "5",
/*省略*/
}
}
録画が停止します。
Compositeモードの通り、全uidの音声、映像を1つにまとめて保存します。
be2b10c1a24bf3ac0c7e8593ec3e1d83_demo.m3u8
be2b10c1a24bf3ac0c7e8593ec3e1d83_demo_20200519033733096.ts
be2b10c1a24bf3ac0c7e8593ec3e1d83_demo_20200519033749339.ts
be2b10c1a24bf3ac0c7e8593ec3e1d83_demo_20200519033805381.ts
be2b10c1a24bf3ac0c7e8593ec3e1d83_demo_20200519033821354.ts
(トランスコード環境にコピー後)コンバートスクリプトを実行します。
python format_convert.py /home/composite m3u8 mp4
※詳細はトランスコード環境を参照
be2b10c1a24bf3ac0c7e8593ec3e1d83_demo.m3u8
be2b10c1a24bf3ac0c7e8593ec3e1d83_demo_20200519033733096.ts
be2b10c1a24bf3ac0c7e8593ec3e1d83_demo_20200519033749339.ts
be2b10c1a24bf3ac0c7e8593ec3e1d83_demo_20200519033805381.ts
be2b10c1a24bf3ac0c7e8593ec3e1d83_demo_20200519033821354.ts
be2b10c1a24bf3ac0c7e8593ec3e1d83_demo.mp4 ←ここ
※映像は一部隠しています。
映像枠に表示する映像がない場合は、背景色(updateLayout実行時設定)が設定されます。
Compositeモードでの録画の実施と映像視聴までできました。
トランスコード環境では、以下のことを実施することができます。
下記環境をご準備ください。
※スクリプトは2020/05現在のリンクです。
Merge Audio and Video Filesより、Agora Audio & Video File Merging(マージ用スクリプト)をダウンロードします。
解凍後、フォルダ内にconvert.pyとffmpeg.tar.gzがあることを確認します。
Agora_Cloud_Recording_Tools_v1.0.0.7_20191009-1570616811_830.tar
Cloud_Recording_tools
convert.py
ffmpeg.tar.gz
convert.py
ffmpeg.tar.gz
ffmpeg
python convert.py -f <directory> -m 0 -p 30 -r 640 360
Convert File Formatより、Agora Format Converter(コンバート用スクリプト)をダウンロードします。
format_convert_1.0.tar.gz
format_convert.py
コンバートの方法は2つあります。
python format_convert.py <directory> <source_format> <destination_format>
python format_convert.py /home/Composite m3u8 mp4
この例では/home/individual以下に保存したファイルに対し、m3u8をmp4へ変換します。
専用スクリプトに限らずffmpegでより高度なコンバートが可能です。
ffmpeg -i <input_filename> -vcodec <video_codec> -acodec <audio_codec> -absf <bitstream_filter> <output_filename>
ffmpeg -i /home/Composite/be2b10c1a24bf3ac0c7e8593ec3e1d83_demo.m3u8 -vcodec copy -acodec copy -absf aac_adtstoasc output.mp4
/home/Compositeにあるbe2b10c1a24bf3ac0c7e8593ec3e1d83_demo.m3u8ファイルを
output.mp4で出力する例になります。