vtool.jp
セキュアで高速な HLS ストリーミング配信プラットフォーム。
Webinar 同期再生、API 制御、そして柔軟なユーザー管理を提供します。
HLS ストリーミング
アップロードされた動画は自動的に HLS (m3u8) 形式に変換され、ネットワーク環境に合わせて最適なビットレートで配信されます。
Webinar 同期再生
WebSocket 技術により、視聴者全員のプレイヤーをリアルタイムで同期。オンラインセミナーや同時視聴会に最適です。
外部制御 API
REST API を通じて外部システムからプレイヤーを操作可能。既存の CMS やアプリにシームレスに統合できます。
Developer Guide
方式A: iframe 埋め込み (既存)
別オリジンの iframe でプレイヤーを表示します。
<iframe
src="https://vtool.jp/embed?v=VIDEO_ID"
width="640" height="360"
frameborder="0"
allow="autoplay; fullscreen"
allowfullscreen>
</iframe>
A-1. postMessage 受信イベント
// type は vtool:* 形式
// vtool:ready { video_id, room, src, duration }
// vtool:play { video_id, room, src, currentTime, duration }
// vtool:pause { video_id, room, src, currentTime, duration }
// vtool:timeupdate { video_id, room, src, currentTime, duration, paused }
// vtool:seeked { video_id, room, src, currentTime, duration, paused }
// vtool:ended { video_id, room, src, currentTime, duration }
// 受信例
window.addEventListener('message', (e) => {
if (!e.data || !e.data.type) return;
if (e.data.type === 'vtool:timeupdate') {
console.log(e.data.currentTime, e.data.duration);
}
});
// 再生位置の取得
iframeEl.contentWindow.postMessage({ type: 'vtool:request_state' }, 'https://vtool.jp');
// request_state の返却: vtool:state
// { video_id, room, src, currentTime, duration, paused }
受信側では event.origin === "https://vtool.jp" の確認を推奨します。
WebSocket: wss://wss.vtool.jp/ws/?room=VIDEO_ID
方式B: JS SDK 埋め込み (iframeなし)
同一ページ内に <video> を生成します。
<div id="vtool-player"
data-vtool-id="VIDEO_ID"
data-vtool-user-id="USER_123"></div>
<script src="https://vtool.jp/sdk/vtool-embed.js"></script>
B-1. JS SDK API
const player = VtoolEmbed.mount('#vtool-player', { videoId: 'VIDEO_ID' });
player.ready.then(() => player.play());
player.pause();
player.seek(120); // 秒
player.setVolume(0.5); // 0.0 - 1.0
player.setRate(1.25);
B-2. JS SDK イベント
player.on('ready', (e) => {});
player.on('play', (e) => {});
player.on('pause', (e) => {});
player.on('timeupdate', (e) => {});
player.on('ended', (e) => {});
通信診断スクリプト (1スクリプト埋め込み)
外部サイトに1行だけ埋め込み、HLS/Range/WS/速度/再生テストの結果を表示します。
<script src="https://vtool.jp/diag/vtool-diagnostic.js"
data-video-id="VIDEO_ID"
data-room="ROOM_ID">
</script>
VIDEO_ID: vtool 側の動画ID(/video/VIDEO_ID/master.m3u8 の ID)
ROOM_ID: WebSocket の room 名。通常は VIDEO_ID と同じ値です。
省略時は vtool 側のサンプル動画IDを使用します。
共通: コントロール API (サーバー経由)
iframe 方式・JS SDK 方式どちらでも利用できます。
対象の動画が Webinar (同期) モード の場合に有効です。
通常動画は「外部コントロール許可」を有効にすると利用できます。
Endpoint: POST https://vtool.jp/api/v1/{action}
Headers: Authorization: Bearer YOUR_API_TOKEN または X-API-Token: YOUR_API_TOKEN
CORS: 外部ドメインから使う場合はプロフィールで許可オリジンの設定が必要です。
| Action | Description | Payload Example (JSON) |
|---|---|---|
| play | 再生を開始します。 | {"room": "VIDEO_ID"} |
| pause | 一時停止します。 | {"room": "VIDEO_ID"} |
| seek | 指定秒数へシークします。 | {"room": "VIDEO_ID", "seconds": 120} |
| rate | 再生速度を変更します (0.5 ~ 2.0)。 | {"room": "VIDEO_ID", "value": 1.5} |
| volume | 音量を変更します (0.0 ~ 1.0)。 | {"room": "VIDEO_ID", "value": 0.5} |
const VIDEO_ID = 'xxxxxxxxx';
const API_URL = 'https://vtool.jp/api/v1';
async function sendCommand(action, payload = {}) {
await fetch(`${API_URL}/${action}`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ room: VIDEO_ID, ...payload })
});
}
// 例: 再生ボタン
document.getElementById('playBtn').onclick = () => sendCommand('play');
共通: 動画一覧 API
APIキーで認証し、アップロード済み動画の一覧を取得します。
Endpoint: GET https://vtool.jp/api/v1/videos/list
Headers: Authorization: Bearer YOUR_API_TOKEN または X-API-Token: YOUR_API_TOKEN
Query: page (既定 1), per_page (既定 50 / 最大 200)
curl -H "Authorization: Bearer YOUR_API_TOKEN" \\
"https://vtool.jp/api/v1/videos/list?page=1&per_page=50"
{
"ok": true,
"page": 1,
"per_page": 50,
"total": 123,
"total_pages": 3,
"videos": [
{
"id": "a1b2c3d4",
"title": "sample.mp4",
"filename": "sample.mp4",
"duration": 12.34,
"status": "complete",
"created_at": "2024-01-01 12:34:56"
}
]
}
共通: サムネイル API
APIキーで認証し、動画サムネイル画像(JPEG)を取得します。
t を指定するとその秒数のフレーム、未指定なら最初のフレームを返します。
Endpoint: GET https://vtool.jp/api/v1/videos/thumbnail
Headers: Authorization: Bearer YOUR_API_TOKEN または X-API-Token: YOUR_API_TOKEN
Query: id (必須), t (任意, 秒)
curl -H "Authorization: Bearer YOUR_API_TOKEN" \\
"https://vtool.jp/api/v1/videos/thumbnail?id=VIDEO_ID&t=0"
戻り値は image/jpeg です(JSONではありません)。
通信診断(埋め込み実行)
このページ内で診断を実行します(サンプル動画IDを自動使用)。