2018年4月22日日曜日

YouTube 生放送自動録画方法を考える

※この記事だけでは録画はできません。また、うまくいかないことがあると思います。

以前の記事でYouTuve Liveの検出もできたので録画もできるんじゃないかなぁと思い、
その手順を考えてみました。

生放送を検出する

ブラウザを立ち上げてその動画を表示

何かツールを使い録画する

終了を検出して録画を終了する、ブラウザの閉じる

最初に戻る。

という手順が考えられると思います。
ここでは、ブラウザを立ち上げて動画を表示するだけですが
コマンドプロンプトからキャプチャーソフトで録画・終了できるものは世の中には存在するので、そのキャプチャーソフトの使い方を参考にしてコードに反映させれば録画できるかもしれません。
今回はfirefoxを起動させていますが、他のブラウザだとウィンドウの最大化など制御項目が多いかも?


以下がコードとなります。以前の生放送の検出コードの改造です。
①は自分のAPIキー。②は生放送を監視したいチャンネルID
③にはキャプチャーソフトの録画開始処理。④はキャプチャーソフトの録画終了です。

livechkRec.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?php
$key = "①";
$channelId = "②";
 
$search_api_base = "https://www.googleapis.com/youtube/v3/search?part=snippet";
$search_api = $search_api_base . "&channelId=" . $channelId . "&type=video&eventType=live" . "&key=" . $key ;
 
//タイムゾーンを東京に設定
date_default_timezone_set('Asia/Tokyo');
echo  "起動開始時間". date('H:i:s') . PHP_EOL ;
 
loop:
//前半
$flag = 1;
while($flag)
{
 $search_contents = file_get_contents($search_api);
 $search_json = json_decode($search_contents,true);
 
 if(empty($search_json["items"]) == FALSE)
 {
  echo  date('H:i:s')  . "に放送開始!" . PHP_EOL ;;
  $videoId = $search_json["items"][0]["id"]["videoId"];
  $exestr = "Start firefox -new-window"." https://www.youtube.com/watch?v=" . $videoId;
  $ftolk =  popen($exestr,'r');
  pclose($ftolk);//ファイルポインタを閉じてるだけ
 
  //③ここに録画する処理を足す
  $flag = 0;//whileから抜ける
 }
 //60秒遅延
 usleep(60*1000000);
}
 
//後半
$flag = 1;
while($flag)
{
 $search_contents = file_get_contents($search_api);
 $search_json = json_decode($search_contents,true);
 
 if(empty($search_json["items"]) == TRUE)
 {
  echo  date('H:i:s')  . "に放送終了!" . PHP_EOL ;
  //④ここに録画を終了する処理を足す・ブラウザも閉じる!
  $flag = 0;//whileから抜ける
 }
 //60秒遅延
 usleep(60*1000000);
}
 
 
goto loop;
 
?>


注釈として
12行目と53行目がペアとなっています。処理が終了したら最初に戻るgoto処理。
26行目はファイルポインタを閉じているだけでブラウザを閉じるわけではありません。
PHPではアプリケーションを起動する関数はいろいろあるようですが、これが最適かはわかりません。とりあえず起動はできます。
24行目 引数に開きたいURLを付けるとfirefoxはそのURLを開く
42行目は生放送の終了条件のチェックです。60秒周期で監視しているので生放送1→生放送2も続けて同じ放送と判定されるから同じvideoIdであるか判定したほうがいいかも。

改善点・注意点として
firefoxの新しいウィンドウとして表示されますが、前回のブラウザの大きさに左右されてたりブックマークのサイドバーの状態が維持されています。
生放送でも広告が表示されることがありますが手動スキップはできません。
広告が1時間とか長かったから手も足も出ないです。
広告後に再生が手動の場合もある?
生放送後砂嵐画面で止まるなら音がでていないのでブラウザを終了する必要ないかも。
そもそもYouTubeが最近止まるってリロード必要の場合があるし。。。
60秒周期で処理していますがもっと短くしないと動作確認も大変かも
自分が家にいないときに動画が流れてうるさい場合もあるかも。
前回同様、限定公開も無理。

など考える点がたくさん。アプリの組み合わせで実現するだけだから仕方ないよね・・・
録画しっぱなし、生放送は一回だけの想定ならこれで使えないことはないと思う。
もう出先で通知を受け取ってリモートデスクトップの操作のが楽か?
あまり自分には生放送を録画するという必要に迫られていないのでこのぐらいでクローズ

0 件のコメント:

コメントを投稿