sample_vcam.hsp

sample\basic\sample_vcam.hsp » Plain Format

;============================================================
;   sample_vcam.hsp -- DirectShow 仮想ウェブカメラ サンプル
;
;   HSP のスクリーン描画内容を仮想カメラとして配信するデモ。
;   Zoom / Teams / OBS 等のアプリで「IronHSP Virtual Camera」を
;   カメラデバイスとして選択すると映像を確認できます。
;
;   事前準備:
;     1. 管理者権限のコマンドプロンプトで以下を実行:
;        regsvr32 hspvcam.dll
;     2. このサンプルを実行
;     3. Zoom 等のアプリでカメラに「IronHSP Virtual Camera」を選択
;============================================================

#include "iron_vcam.hsp"

    ; 仮想カメラの解像度とフレームレート
    cam_w = 640
    cam_h = 480
    cam_fps = 30

    ; HSP ウィンドウをカメラと同じサイズに設定
    screen 0, cam_w, cam_h
    title "IronHSP Virtual Webcam Demo"

    ; 仮想カメラ初期化
    vcam_init cam_w, cam_h, cam_fps
    if stat != 0 {
        dialog "仮想カメラの初期化に失敗しました\n\nregsvr32 hspvcam.dll を\n管理者権限で実行してください", 1, "エラー"
        end
    }

    mes "仮想カメラを初期化しました"
    mes "解像度: " + cam_w + "x" + cam_h + " @ " + cam_fps + "fps"
    mes ""
    mes "このウィンドウの内容が仮想カメラに送信されます。"
    mes "Zoom 等で「IronHSP Virtual Camera」を選択してください。"
    mes "ESC キーで終了します。"
    mes ""

    ; アニメーションパラメータ
    angle = 0
    frame_count = 0

    ; メインループ
    repeat
        ; ESC キーで終了
        getkey k, 27
        if k : goto *quit

        redraw 0

        ; 背景をグラデーションで描画
        repeat cam_h
            r = cnt * 64 / cam_h
            g = 32 + cnt * 128 / cam_h
            b = 128 + cnt * 127 / cam_h
            color r, g, b
            line 0, cnt, cam_w, cnt
        loop

        ; 回転する円
        cx = cam_w / 2
        cy = cam_h / 2
        sz = 80

        color 255, 200, 0
        circle cx - sz, cy - sz, cx + sz, cy + sz, 1

        ; テキスト表示
        color 255, 255, 255
        font "MS Gothic", 20
        pos 10, 10
        mes "IronHSP Virtual Webcam"
        pos 10, 35
        mes "Frame: " + frame_count

        ; 接続状態の表示
        pos 10, 60
        if vcam_is_active() {
            color 0, 255, 0
            mes "Status: LIVE"
        } else {
            color 255, 100, 100
            mes "Status: Waiting..."
        }

        ; 時刻表示
        color 255, 255, 255
        pos 10, cam_h - 30
        mes "Time: " + gettime(4) + ":" + strf("%02d", gettime(5)) + ":" + strf("%02d", gettime(6))

        redraw 1

        ; カレントスクリーンを仮想カメラに送信
        vcam_send

        angle += 3
        if angle >= 360 : angle -= 360
        frame_count++

        await 1000 / cam_fps
    loop

*quit
    ; 後始末
    vcam_term
    end