[8日目] LiveShell Xの密かなコダワリ

こんにちは。小林哲之です。組み込みソフトウェアエンジニアとして、LiveShell Xに携わりました。

先日、秋葉原ライブカメラをリニューアルして配信機材としてLiveShell Xを投入しました。最初だけちょっとつまずきましたが、現在は安定して動作しています。今まではUstreamだけでしたが、新たにYouTube LiveFRESH! by AbemaTVが加わりました。この3つの配信を一台のLiveShell Xでまかなっています。YouTube Liveには1920×1080 (いわゆるフルHD)で配信しています。(2016年12月8日現在)
秋葉原ライブカメラを見るにはタブレットのアプリがおすすめです。ちょっと古いパソコンよりもずっと滑らかに再生できます。個人的にはFRESH! でながめるのが気に入っています。

歩行者天国のときの秋葉原ライブカメラ

歩行者天国のときの秋葉原ライブカメラ

さて、今日はカタログにはあらわれない、開発者のコダワリのポイントをいくつか紹介します。

小さくすることへのコダワリ

liveshellx_on_hand
これは製品コンセプトを決めた弊社代表岩佐のコダワリです。
最初にできあがってきたモックは今より少し背が高い形状でした。しかし岩佐がそれをよしとせず、メカデザのエンジニアとハードウェアのエンジニアが部品の配置をあれこれパズルのように組み合わせ、この大きさになりました。しかもバッテリー駆動時間を犠牲にしていません。
(その過程で、私が希望していた標準サイズのSDカードスロットは没になり、マイクロSDカードスロットに変更されました。)
「LiveShell Xにはなぜ ○○コネクタをつけなかったの?」と聞かれることがありますが、それは大雑把に言えば、小さくすることを優先したからです。(もちろんコストも。)

複数配信のコダワリ

LiveShell X はひとつのビデオ入力から複数のライブ配信サービスに異なる画像サイズ、異なるビットレートで同時に配信することができます。実はこの機能は、一番最初の製品企画会議では必須要件に入っていませんでした。既存機種からの変更規模があまりに大きいので、「そこまではやらなくていい」という位置づけでした。しかし、「ライブ配信としては1280x720p 30fps で充分なのではないか?この製品で1920x1080p 60fpsできるようになるが、それは過剰で実際には使われずに、LiveShell 2を2台買ったほうがいいと言われてしまうのではないか?LiveShell 2の2台分以上の価値を提供したい。」という思いがあり、私のコダワリで複数配信の機能を入れることにしました。
でもやはり、実装には苦労しました。単純に複数別々に配信する実験まではうまくいったのですが、その後の製品レベルまで詰めて行くのがつらかったです。いくつかの制限事項と折り合いをつける必要もありました。「複数配信の機能を入れていなければ、とっくに完成したなあ」と後悔したことも。
いろいろな人の手も借りつつ、最終的になんとか完成させることができました。おかげさまで、この複数配信できる機能は好評のようです。こだわった甲斐がありました。

モノラル音声の密かなコダワリ

音声のチャネル数の選択の部分なのですが、従来のLiveShellシリーズではステレオとモノラルの2つが選択可能です。
これと同じように作ることもできたのですが、ちょっと思うところあってLiveShell X では以下のように選択肢を増やしておきました。

  • モノラル (左右ミックス)
  • モノラル (左のみ)
  • モノラル (右のみ)
  • ステレオ

つまり、左右のチャネルのどちらか片方だけを使うというモードを追加しました。
この実装はそれほど難しいものではありません。従来のLiveShellシリーズになかったのは単にその必要性がなかったからです。

これはどんなときに使うことを想定したかというと、「簡易2カ国語対応」です。昔のテレビの2カ国語放送のように、音声2チャンネルのうちの左に主音声、右に副音声を入れてもらえば、複数同時配信するときに、映像は同じものを流しつつ、ひとつは主音声、もうひとつには副音声をつけることができます。
図で示すとこんな感じです。
simple_multilingual_streaming
実際にこんな使い方をする人がいるかどうかはわからなかったのですが、LiveShell Xの発売直前の体験イベントに来ていただいた方がまさにこの機能を要望していたのでびっくりしました。「こんなこともあろうかと」とか心の中で言いながらドヤ顔で説明させていただきました。(^^)v

実は録画も複数できるようにしておいたというコダワリ

LiveShell Xはひとつのビデオ入力から複数のライブ配信サービスに同時に映像を送ることができます。実は録画もライブ配信も最後の出力先をどこにするか?の違いでしかありません。なので、録画も複数できます。(録画のファイル名は開始時刻を元に自動生成していますが、同時刻に複数録画を開始してもファイル名が重複しないように、チャネル番号もファイル名に含むようにしてあります。)
複数録画したい場面はほとんどないとは思いますが、同一の映像をH.264とH.265でそれぞれ同時に録画してみて、画質をじっくり見比べるということをしたい人はいるだろうなあと。

ただし、複数の録画を同時にするときにはマイクロSDカードにランダムアクセス性能の高いものを使用してください。世の中にはシーケンシャルアクセスは充分速いのにランダムアクセスがとても遅いマイクロSDカードが存在して、それを使って高ビットレートで複数の同時録画をするとフレーム落ちが発生する可能性があります。
安全をとって録画を同時にはひとつだけしかできないように制限をかけるという案もあったのですが、あえて制限はしませんでした。なお、UHS 1やclass 10などの規格はシーケンシャルアクセス性能しか考慮していないので、選定基準にできないことに留意してください。

最後に

とりとめがなくなるので今回はこのあたりで切り上げます。コダワリポイントはまだまだあるので、またそのうちに。

ライブ配信機器として、入門機ならばLiveShell 2をおすすめしますが、ワンランクアップしたい方はぜひLiveShell Xをご検討ください。
値段が高い分の価値はありますよ!!

[8日目] LiveWedgeの録画で分割されたmp4ファイルをつなぎ合わせる方法

こんにちは、小林です。組込みソフトウェアを担当しています。
昨日は金星探査機「あかつき」の周回軌道投入と、その記者会見のライブ中継をかじりついて見ていました。私も技術者のはしくれなので、設計したものが設計の通りに動くことですら簡単ではないことは日々痛感しています。ましてや、一度失敗してしまって修理もできないものをリカバリーするのは気の遠くなるほど難しいことはよくわかります。メインエンジンは壊れてしまったし、残りの部分も設計寿命をこえて劣化しています。しかもやり直しが効かない一発勝負です。正直絶対無理だと思っていました。この記事を書いている時点では、まだ成否は確定していませんが、この段階まで持って行くことができただけでもすごいとしかいいようがありません。携わっている方々の執念を感じました。
(12/9 追記) 周回軌道投入は成功だそうです。おめでとうございます! (追記 ここまで。)

さて、アドベントカレンダー8日目はLiveWedgeに関係するTipsです。

LiveWedgeではSDカードに録画をすることができます。録画を開始すると、SDカードの残り容量が100MBを切るまでは録画を継続するので大きなサイズのSDカード(SDXCカードの128GBまで試しています)を使うとかなりの長時間の録画ができます。
ただし、LiveWedgeの搭載メモリに限りがあるため、以下の条件で録画ファイルを分割するようになっています。
(1) ファイルのサイズが4000 * 1024 * 1024 バイトを超えた
(2) 150分以上経過した

もしかしたら、いいところで録画ファイルが分割されてしまうことがあるかもしれません。しかし、分割したときでも可能な限りデータの欠落がないようにしているので、後からつなぎ合わせることができます。

この記事のタイトルの通り、LiveWedgeの録画で分割されたmp4ファイルをつなぎ合わせる方法として私のおすすめの方法を紹介します。
ffmpegというコマンドを使用します。

この方法の利点は
(1) 無料のツールだけでできる
(2) 再エンコードしないので画質の劣化がない
(3) 同じく再エンコードしないので処理時間が短い

ffmpegを使用して、まずmp4ファイルを一度mpegtsのフォーマットに変換し、mpegtsファイルどうしを連結してから再度mp4に戻します。これをコマンド一発で行うスクリプトを用意しました。
大量のデータ転送が発生するので、mp4ファイルはあらかじめ高速なSSDにコピーしておき、カレントディレクトリもSSDにするのがおすすめです。私のMacBookProでは2つに分割された合計5時間の録画ファイルをひとつにつなぐのに約1分で完了しました。

ffmpegの入手

ffmpegは以下のところからダウンロードすることができます。
https://www.ffmpeg.org/download.html
ソースコードからビルドしてもいいですが、ビルド済みのバイナリを取ってくるのが手軽です。
環境変数PATHをセットして、以下のようにコマンドラインから実行できれば、準備OKです。

$ ffmpeg -version
ffmpeg version 2.7.2-tessus Copyright (c) 2000-2015 the FFmpeg developers
built with Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn)
configuration: --cc=/usr/bin/clang --prefix=/opt/ffmpeg --as=yasm --extra-version=tessus --enable-avisynth --enable-fontconfig --enable-gpl --enable-libass --enable-libbluray --enable-libfreetype --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopus --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzmq --enable-version3 --disable-ffplay --disable-indev=qtkit --disable-indev=x11grab_xcb
libavutil      54. 27.100 / 54. 27.100
libavcodec     56. 41.100 / 56. 41.100
libavformat    56. 36.100 / 56. 36.100
libavdevice    56.  4.100 / 56.  4.100
libavfilter     5. 16.101 /  5. 16.101
libswscale      3.  1.101 /  3.  1.101
libswresample   1.  2.100 /  1.  2.100
libpostproc    53.  3.100 / 53.  3.100

Mac, Linuxの場合

以下をコピペしてconcat_mp4.sh という名前で保存します。

#!/bin/sh -x
if [ $# -ne 3 ]; then
  echo "Usage: " $0 " input1.mp4 input2.mp4 output.mp4" 1>&2
  exit 1
fi
FFMPEG=ffmpeg
TEMP1="$1.$$.ts"
TEMP2="$2.$$.ts"
$FFMPEG -f mp4 -i $1 -c copy -bsf:v h264_mp4toannexb -f mpegts $TEMP1
$FFMPEG -f mp4 -i $2 -c copy -bsf:v h264_mp4toannexb -f mpegts $TEMP2
$FFMPEG -y -i "concat:$TEMP1|$TEMP2" -c copy -bsf:a aac_adtstoasc -f mp4 $3
rm -f $TEMP1 $TEMP2

実行権を付与します

$ chmod +x ./concat_mp4.sh

20151021T175814_000.mp4と20151021T175814_001.mp4を連結してout.mp4として保存するならば、以下のようにコマンドを実行します。

$ ./concat_mp4.sh 20151021T175814_000.mp4 20151021T175814_001.mp4 out.mp4

Windowsの場合

以下をコピペしてconcat_mp4.bat という名前で保存します。

if "%~3"=="" (
  echo Usage: %~0 input1.mp4 input2.mp4 output.mp4
  exit /b 1
)
setlocal
set FFMPEG=ffmpeg
set TEMP1="%1.%RANDOM%.ts"
set TEMP2="%2.%RANDOM%.ts"
%FFMPEG% -f mp4 -i %1 -c copy -bsf:v h264_mp4toannexb -f mpegts %TEMP1%
%FFMPEG% -f mp4 -i %2 -c copy -bsf:v h264_mp4toannexb -f mpegts %TEMP2%
%FFMPEG% -y -i "concat:%TEMP1%|%TEMP2%" -c copy -bsf:a aac_adtstoasc -f mp4 %3
del %TEMP1% %TEMP2%

20151021T175814_000.mp4と20151021T175814_001.mp4を連結してout.mp4として保存するならば、以下のようにコマンドを実行します。

> concat_mp4.bat 20151021T175814_000.mp4 20151021T175814_001.mp4 out.mp4

最後に

今回はコマンドラインで使えるMP4動画を連結する方法を紹介しました。
なお、連結してサイズが4GBを超えたファイルはFATでフォーマットされているSDカードには書き戻すことはできませんので、念のため。

人気のライブ配信サービス、ツイキャスとTwitchをLiveShellシリーズで配信する方法

 

カイです。イカはしばらくお休み中です。

若者の間で人気というライブ配信サービス「ツイキャス」が、新たに外部ツール配信に対応しました。

ツイキャスが外部ツール配信に対応、ゲーム実況配信に本格参入 | モイ株式会社
http://about.moi.st/ja/2015/10/14/game/

ツイキャスはこれまで専用アプリを使ったスマートフォンでの配信のみに対応していましたが、今回の外部ツール配信により、RTMP対応の配信システムを利用してツイキャスでのライブ配信が利用可能になります。

我らがLiveShellシリーズもRTMP配信に対応していますので、さっそくツイキャスの配信テストを行ないました。テストにはLiveShell PROを利用していますが、仕様上LiveShell 2およびLiveWedgeでも同様の手順でライブ配信が可能です(※LiveShellはH.264に対応していないため、上記サービスでは利用できません)

なお、現在のところ外部ツール配信が利用できるのはツイキャスのレベルが24以上のユーザーのみに限定されています。また、該当ユーザーに招待を受ければ外部ツール配信が可能なほか、企業・団体・アーティストなども別途申し込みによって外部ツール配信が利用可能になります。

ツイキャスの外部ツール配信は詳細が下記URLにありますのでご参照ください。

PCから高画質ゲーム配信(外部ツール配信)をするには – ツイキャス
http://twitcasting.tv/indexannounce.php?title=ANNOUNCE_JA_HELP_GAME_TOOL

ここでは配信の流れを簡単に。まずはツイキャスにログインし、画面上部の「PC配信」を選択、続いて画面中央の「ゲーム配信」を選択します。

twicas01画面下部の「URL」「Stream Name」の2つをメモします。

twicas02続いて今度はLiveShell PROの設定。ユーザー登録などはすべて完了した状態で設定を行ないます。購入直後の状態から設定する場合はオンラインマニュアルも併せてご覧下さい。

dashboardにログインし、設定の「配信設定」「配信先サービス」から「その他配信サービス「サーバーアドレス入力」を選びます。

db01ここで先ほどメモしておいた情報を使います。「配信先URL」にはrtmpから始まるURL、「ストリーム名」にはそのままStream Nameを入力して「決定」を選択します。

db02最後にdashboard右下の「配信開始」をクリックして配信をスタート。

db03現状ではdashboardでツイキャスの画面はプレビュー表示できませんが、画質などの細かい設定は変更可能。ツイキャスの外部ツール配信は映像・音声の合計で500kbps程度が最適値とのことなので、プリセットから「500kbps」を選択します。

db04ここまで設定が終ったらツイキャスに移動しましょう。無事にLiveShell PROに接続したカメラの映像が表示されていれば成功です。

twicas03なお、ツイキャスの外部配信ツールでは外部サイトのプレビュー表示も対応しているため、dashboardでのプレビュー表示も技術的には可能です。こちらは今後対応予定ですが、しばらくは配信および設定をdashboard、映像の確認やTwitterへの投稿はツイキャスからと併用をお願いします。

ここまではツイキャスの設定でしたが、続いてはツイキャスに名前が似ているTwitchのお話。こちらは以前から外部ツール配信に対応しており、同様にLiveShell PROでのライブ配信が可能です。海外を中心にゲーム配信では人気のサービスですので、こちらも使い方を簡単にご説明。

基本の設定はツイキャスと同様で、配信に必要なURLとストリーム名を取得し、dashboardの「その他配信サービス「サーバーアドレス入力」から設定します。

まずはTwitchにログインし、自分のIDをクリックしてから「ダッシュボード」を選択。

twitch01ログインしたら「配信キー」を選択、「Show Key」をクリックします。

twitch02「大事な情報だからシェアしちゃだめだよ!」という注意を踏まえた上で「I Understand」をクリック。

twitch03ようやく配信キーが取得できました。万が一配信キーを他人に伝えたりした場合も、ここからリセットすることができます。twitch04続いて配信サーバー情報を入手。下記のサイトはTwitchの配信サーバーを一覧で公開しています。

Twitch & Justin.tv Ingest Servers
http://bashtech.net/twitch/ingest.php

日本向けのサーバーは下記の2つ。以前まで日本サーバーは1つだったのですが、やはりTwitchは日本でも人気のようです。

Location: Asia: Tokyo (2), Japan
RTMP URL: rtmp://live-tyo-2.twitch.tv/app
Availability: 1

Location: Asia: Tokyo, Japan
RTMP URL: rtmp://live-tyo.twitch.tv/app
Availability: 1

上記サーバーURLのうち好きなほうをdashboardの「配信先URL」に、先ほど取得した配信キーを「ストリーム名」に入力。あとの設定はツイキャスと共通で、「配信開始」でライブ配信をスタート、プルダウンから画質を選択できます。db05無事にTwitchでもLiveShell PROからライブ配信ができました。

twitch05ツイキャスとTwitch、どちらのサービスもパソコンのみで配信可能ですが、24時間以上の配信が可能な安定性、ブラウザベースでのかんたん操作などLiveShellシリーズならではの魅力もたくさんあります。ぜひライブ配信のお供にLiveShellシリーズをご活用ください。