Help us understand the problem. What is going on with this article?

一瞬でライブ配信を実装できるbambuserを試してみた

bambuserとは

bambuserとは、ライブコマースなどのユースケースを想定したライブ配信ソリューションです。
配信側と視聴側が両方用意されています。
https://bambuser.com/

ドキュメント
https://bambuser.com/docs/

機能

リソースURI

bambuserのキーコンセプトとして、リソースURIがあります。
それぞれの配信をidentifyするもので、以下のようなURLで指定されます。

https://cdn.bambuser.net/broadcasts/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee

配信はデフォルトでプライベートであり、署名キーを使用して署名付きリソースURIを生成し、それを配布することで視聴者が配信を見れるようになります。pre-signed URIも用意されています。

サンプルコード

const crypto = require('crypto');
const MY_DA_ID = '';
const MY_DA_SECRET_KEY = '';
let uri = 'https://cdn.bambuser.net/broadcasts/948bca3e-a4af-471d-9f4a-2f51d246a10a';
uri += '?da_id=' + MY_DA_ID;
uri += '&da_timestamp=' + Math.floor(Date.now() / 1000);
uri += '&da_nonce=' + Math.random();
uri += '&da_signature_method=HMAC-SHA256';
const stringToSign = 'GET ' + uri;
const signature = crypto.createHmac('sha256', MY_DA_SECRET_KEY)
  .update(stringToSign)
  .digest('hex');
const signedUri = uri + '&da_signature=' + signature;

動画配信

iframeを埋め込むだけで、ライブ配信が実現できてしまいます。
また、アプリ側もSDKが用意されていて、React NativeやCordovaなどにも対応しています。
WEBの場合は、以下のようにiframeを埋め込むだけで、配信機能が実装できます。
ブラウザでカメラと音声の許可が必要です。

<iframe 
  src="https://dist.bambuser.net/broadcaster/?application_id=9TNyWjNc6WxhszYykobSGA&ticket=domain%3Dlvh.me&da_signature_header=da_id..." 
  style="border: none; width: 100%; height: 100vh"
  allowfullscreen
  allow="microphone; camera">
</iframe>

RTMP配信

Wirecast / OBS / Switcher Studio / GoPro / ドローンなどからのRTMP配信に対応しています。

プレイヤー

埋め込みの他、プレイヤーリンクや直接の動画ソースURLを作成することもできます。

<iframe 
  src="https://dist.bambuser.net/player/? 
  resourceUri=https%3A%2F%2Fcdn.bambuser.net%2Fgroups%2F92115%2Fbroadcasts..." 
  style="border: none" 
  allowfullscreen>
</iframe>

JavaScriptでコントロールする場合

var resourceUri = 'https://cdn.bambuser.net/broadcasts/0b9860dd-359a-67c4-51d9-d87402770319?da_signature_method=HMAC-SHA256&da_id=9e1b1e83-657d-7c83-b8e7-0b782ac9543a&da_timestamp=1482921565&da_static=1&da_ttl=0&da_signature=...';

var player = BambuserPlayer.create(document.getElementById('player'), resourceUri, {
  noFullscreen: true // Do not allow fullscreen
});

// 停止したりした時のイベントリスナー
player.addEventListener('pause', function() {
  console.log('player paused');
});
player.addEventListener('timeupdate', function() {
  console.log('current time', player.currentTime);
});

player.controls = false;
player.currentTime = 300;
player.play();

document.getElementById('player').addEventListener('click', function() {
  return player.paused ? player.play() : player.pause();
});

if (navigator.userAgent.match(/iPad|iPhone|iPod/) && !window.MSStream) {
  player.controls = true;
}

React Native

珍しくReact Nativeに対応しています。

配信用

https://github.com/bambuser/react-native-bambuser-broadcaster

プレイヤー用

https://github.com/bambuser/react-native-bambuser-player

遅延

遅延についてはある程度のチューニングを行ったhlsというレベルのため、2~6秒は発生してしまいます。そのため、もちろんですが双方向でコミュニケーションを行うような用途には使えません。
そのかわり、WebRTCなどよりも汎用性が高く、クライアント側のカスタマイズもしやすいかと思います。

価格・プラン

2020年5月時点の価格です。
※ 動画時間 = 1ヶ月に生成されたビデオの合計時間。RTMPもカウントされる。
※ 配信容量 = 視聴者に配信される動画の容量の合計。
※ オンデマンド容量 = ストレージへの保管料金。

Starter

基本料金: $39(約4,000円)
同時配信数: 3つまで
動画時間: 25h~ は1時間あたり$1.989(約200円)
配信容量: 25GB~ は1GBあたり$0.378(約40円)
オンデマンド容量: 25GB~ は1GBあたり$0.378(約30円)

Medium

基本料金: $399(約40,000円)
同時配信数: 無制限
動画時間: 250h~ は1時間あたり$0.246(約26円)
配信容量: 250GB~ は1GBあたり$0.063(約7円)
オンデマンド容量: 250GB~ は1GBあたり$0.081(約9円)

Large

基本料金: $1199(約128,000円)
同時配信数: 無制限
動画時間: 1000h~ は1時間あたり$0.246(約12円)
配信容量: 1000GB~ は1GBあたり$0.050(約6円)
オンデマンド容量: 1000GB~ は1GBあたり$0.081(約4円)

注)720pで1時間=約1GBです。

まとめ

ライブ配信のチューニングはフルスクラッチだと初期コストがかかるため、手っ取り早くライブ配信システムを導入したい場合におすすめです。

wktq
IaaS + Rails + React Nativeのフルスタックアプリ開発者。 I'm a full-stack mobile developer with React Native, RoR, and IaaS (PaaS, SaaS).
https://tenova.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした