• RiotBlue PlayerのLive配信の宣伝ツイートを改良

    毎日、夕方の6時頃に自動でRiotBlue PlayerのYouTube Live配信のurlをツイートしていました。

    ツイートの内容は定数として定義された文字列のurlになっていました。
    ここで問題が発生!
    何らかの原因でLive配信が停止している時があり、その場合はツイートしたurlのリンク先でLive配信が見れない状態になっていました。

    この問題を解決するために、宣伝ツイートするタイミングでLive配信しているurlだけを検索してツイートするようにしました。
    ツイートされない場合は、配信が止まっているということの確認もできます。

    特定のチャンネルのLive配信しているリストを作成するJavascriptは、Chat GPTくんに教えてもらいました。
    Chat GPTくんは、本当に頼りになる奴ですw


  • Google Cloud Platformの利用制限

    RiotBlue Playerの24時間再生のYouTube配信にAIチャット機能を追加したところ、Google Cloud Platform(GCP)の利用制限を超えてAPIが使えなくなりました。

    現在、YouTubeによる24時間再生は3ストリームの配信をしていて、全てにAIチャット機能を搭載しています。YouTubeのコメントの取得のためにYouTube Data APIを使っているのですが、GCPにAPIをコールする上限が存在しています。

    10,000/day
    1,800,000/minute

    この回数を超えると、APIの応答に403エラーが返ってきます。
    1日に10,000回が上限なのに、1分間に1,800,000回が上限というのはちょっと意味がわかりません。

    コメント取得を5分周期で実施したところ、4320/dayの実績となりエラーしなくなりました。
    5分周期なら、1時間に12回のコールになるので、12回×24h×3ストリーム=864/dayのはずなんですが、何故か5倍のコール回数になってます。謎です。
    上限の10,000回まで余裕があったので、コメント取得回数を3分周期にして様子を見ることにしました。

     

     


  • ChatGPTはプログラムを書けて賢い

    少し前に、YouTubeのLive配信の高評価数と視聴者数を表示するプログラムについて記事を書きました。

    ChatGPTはプログラムを書くことができるとのことなので、質問にプログラムの仕様を記載してみたところ、見事にHTMLを生成してくれました。マジでビックリです。

    ChatGPTの出力したプログラムはほぼ完璧です。しかし、視聴者数を取得する箇所にバグがありました。人間味があるw

    ChatGPTに与えた仕様は以下です。

    「YouTubeのLive配信のVideo IDをフォームのテキストで入力して、タイトルと高評価数と視聴者数をJavascriptで取得して、10秒周期で画面に表示し、高評価数または視聴者数が100以上になったら、それぞれの数値を赤文字にし、100未満になったら黒文字にするHTML表示」

    ChatGPTが生成して、私がバグを修正したコードは以下になります。(バグ修正箇所は赤字

    <!DOCTYPE html>
    <html>
    <head>
    <title>YouTube Live Stats</title>
    </head>
    <body>
    <h1>YouTube Live Stats</h1>

    <label for=”videoId”>Video ID:</label>
    <input type=”text” id=”videoId” name=”videoId”>
    <button type=”button” onclick=”getLiveStats()”>Get Live Stats</button>

    <p id=”title”></p>
    <p id=”likes”></p>
    <p id=”views”></p>

    <script>
    let videoId = “”;

    function getLiveStats() {
    videoId = document.getElementById(“videoId”).value;
    updateLiveStats();
    }

    function updateLiveStats() {
    fetch(`https://www.googleapis.com/youtube/v3/videos?part=snippet,statistics,liveStreamingDetails&id=${videoId}&key=API_KEY`)
    .then(response => response.json())
    .then(data => {
    // タイトルを取得して表示する
    document.getElementById(“title”).innerHTML = data.items[0].snippet.title;

    // 高評価数を取得して表示する
    let likes = data.items[0].statistics.likeCount;
    document.getElementById(“likes”).innerHTML = `Likes: ${likes}`;
    document.getElementById(“likes”).style.color = likes >= 100 ? “red” : “black”;

    // 視聴者数を取得して表示する
    let views = data.items[0].liveStreamingDetails.concurrentViewers;
    document.getElementById(“views”).innerHTML = `Views: ${views}`;
    document.getElementById(“views”).style.color = views >= 100 ? “red” : “black”;
    })
    .catch(error => console.error(error));
    }

    // 10秒ごとに情報を更新する
    setInterval(() => {
    updateLiveStats();
    }, 10000);
    </script>
    </body>
    </html>

    HTMLの中の”API_KEY“をGoogle Cloudで無料で所得して書き換えれば、動作するようになります。その結果は下のようになります。

    YouTube Data APIで取得できる情報を自分で調べるには時間がかかりますが、その部分をサクッと教えてもらえるので、あとは表示の体裁を修正すれば短時間にプログラムを完成することができますね。今後のプログラムはChatGPTにお世話になろうと思います。


  • AIチャットを開始しました

    ネットでmebo(ミーボ)の記事を読み、興味を持ったのでYouTubeのRiotBlue Player24時間配信に実装しました。YouTubeのコメントをYouTube Data APIを使って拾って、OBSのブラウザ表示で画面に返答を表示できるようにしています。

    meboは、トレーニングにより覚えた会話を返答するのと同時に、分からない質問に対しては、今話題のChatGPT相当の言語モデルGPT-3.5 (text-davinci-003)を利用して良い感じの返答をするようになっています。

    ChatGPTによる返答は、良い感じでありますが、あまり正確な情報でないと思います。
    Google検索のように複数の回答の中からユーザーが選択するのではなく、1つの回答しか無いので間違えることが多いのかなと思います。このあたりを改善して使えるものにしているのがBeing AIなのかもしれませんね。

    このページの左側にも「AIチャット」のボタンを置きました。


    meboの記事は、爆速でAI Vtuberを作成するという物でしたが、私の用途としてはコメントを拾って応答を画面に表示するだけで良いので、サンプルとして提供されているhtml, css, Javascriptを少しだけ変更しています。

    具体的には、

    1. AI Vtuberの表示イメージを外す
    2. 音声合成による発話の実装を外す
    3. 表示する文字のスタイルを変更する

    YouTube配信への実装手順は、チャット欄に答えて雑談配信する「AI VTuber」の作り方 – Zenn の記事を読めばできると思います。

    今回、機能を削除して実装したのですが、1つだけ問題がありました。
    オリジナルの処理に音声合成の発話時間をタイミングとして利用している部分があるため、音声合成の処理を外すとうまく動作しません。
    下記のコード修正をしました。

    1. 次のコメントを拾うためのタイミングを音声合成処理の外に記述する
    2. 次のコメント処理の待ちにテキスト表示が終了するまでを追加
    3. “Thinking…………….”の表示終了前にユーザーコメントを表示され、ユーザーコメント内に”.”が表示されるので、”Thinking…………….”の表示スピードを50->25msに変更(1秒以内に表示)

    実装テストする時に注意しないといけないのは、「エージェントの設定」でAIモデルを「GPT-3.5」にしていると、テストで会話するたび無料で使える会話数1000回を20ずつ消費して、上限に達して実装テストができなくなります。実装テストが終わるまでは、AIモデルを「me-bo-幅広い雑談」にして会話の消費量を節約するのが良いかと思います。


  • Botって最高!(IFTTTにハマっている)

    この開発日誌の更新を@RiotBluePlayerのBotに自動でツイートしていましたが、毎日のRiot BlueのYouTube配信スケジュール、YouTube配信枠が立った時のお知らせ、私が「いいね」したYouTube配信をツイートするという処理も追加しました。

    自動でできることは、すべて@RiotBluePlayerのBotアカウントに任せて、人間らしいつぶやきを@maHover18でしていきたいと思います。

    YouTube配信スケジュールのツイートはGASで実行しているのですが、それ以外はIFTTTを使っています。

    IFTTTは様々なサービスのイベントをトリガとして、他のサービスを動作させることができるので、とても楽しいです!
    プログラムする必要は無くて、用意されたサービスを組み合わせてアプレットというものを作成すれば完了します。

    GoogleカレンダーにYouTube配信予定を登録するために、日に数回GASでプログラムを起動していたけど、IFTTTを使えば枠を立てたタイミングでGoogleカレンダーに登録できそうです。
    次の「やることリスト」に登録しておきます。

     


  • YouTube高評価数スクリプトが利用制限に!

    公開したYouTubeの同接数、高評価数、チャンネル登録者数を表示するGASで、自分の24時間の配信に設置したら、利用制限でエラーが発生してました。

    10秒に1回の頻度で3本の24時間配信に設置するのは無茶過ぎたのかもしれません。
    1日の呼び出し回数の制限にかかってしまったようです。
    現在は24時間配信から設置を外しています。

    幸いなことに、Riot Blueの皆が使ってくれている高評価数スクリプトでは、エラーが出てませんでした。

    ,

  • RiotBlue PlayerのYouTube同時配信見直し

    3ストリームで実行していたYouTube同時配信ですが、さらに1ストリーム配信を追加したところ、CPU負荷が上がり通常操作の応答が遅くなってしまいました。

    また、配信が安定せずに止まることもありました。やはり私のサブPCでは、3ストリームが限界のようです。

    どうしても、もう1ストリーム配信したいので、ファイルサーバーとして24時間稼働しているPCにOBSをインストールして配信開始しました。

    今回、配信の映像ビットレートを2000kbpsから1000kbpsに下げました。激しい動画ではないので1000kbpsでも問題ないと判断しました。

    解像度: 1280×720
    フレームレート: 30fps
    映像ビットレート:1000kbps
    音声ビットレート:160kbps

    これで安定して4ストリームの配信ができるようになると思います。

    ,

  • RiotBlue Player 3.0.5をリリース

    予告してたランダム再生の仕様を変更しました。

    検索したリストの曲数を重み付けに加えています。
    リストの曲数が少ない人は、選曲されにくくなります。

    これで雨音さんのkawaii曲の安売りを回避できると思います!

    ■変更点

    1. ランダム再生のアルゴリズム変更
    2. 検索時に全員の再生リストに結果を反映するように変更
    3. 曲数バーの仕様変更、リアルな再生リストの残曲数を表示します。0表示の場合に次の曲を選曲すると再生リストを読み直します。
      実際には次の再生曲がバッファに読み込まれているので、最後の1曲は再生されていない状態です。

     

    ,

  • 3人のランダム再生の仕様変更を考えています

    RiotBlue PlayerでRiot Blueのチェックボックをチェックすると、メンバーの3人の歌がランダムに選曲されるようになります。

    ロジックは下記のようになっています。

    1. 誰の曲を再生するか3人の中からランダムで選ぶ
    2. 選ばれたメンバーの曲リストからランダムで選ぶ
    3. 再生された曲は曲リストから削除する

    このロジックなら、メンバー3人の歌が同じような頻度で被ること無く選曲されると思っていました。

    ムード検索機能で「kawaii」を選択した場合、雨音さんのkawaii曲が少なくて、雨音さんの同じkawaii曲を聞く頻度が高くなってしまいました。
    これはこれで良いのですが、雨音さんのkawaii曲の安売りをしているみたいでよろしくないですw

    雨音さんのkawaii曲を聴くことがレアになるようなロジックに変更することを考えています。

     


  • RiotBlue Player 3.0.4をリリース

    RiotBlue Playerを使ってYouTube複数同時配信で見つかった音声ミュートが解除されないバグを修正しました。

    実は、プログラム中から動作しなくなる懸念を持っていました。

    RiotBlue Playerは、3つのイベントで動作しています。

    1. ユーザ操作ボタン
    2. YouTubeプレイヤー
    3. 1秒周期

    画面に表示される時間や進捗バーの更新は1秒周期のイベント処理で更新しています。
    実は、この1秒周期で音声のミュートを解除する処理を実行しています。

    残再生時間=終了再生時間ー開始再生時間

    という条件でミュートを解除していました。

    今回、このミュート処理を実行する条件となりませんでした。
    通常であれば、再生開始でこの条件に一致してミュートを解除します。
    今回の問題は、PCのCPU負荷が高くなり1秒周期の処理が間に合わず、1秒周期処理時に残再生時間が想定する再生時間より減ってしまい条件に一致しませんでした。
    PCが3ストリーム同時配信したのでCPU処理が間に合わず発生しという高負荷の

    1秒周囲処理が必ず1秒で実行されるという前提のプログラムが間違っていたということです。

    条件を下記のように変更しました。

    (残再生時間<=(終了再生時間ー開始再生時間))AND (ミュートされていたら)


2024年11月
 123
45678910
11121314151617
18192021222324
252627282930