実践Linux
CentOS7        CentOS7 目次へ  TOP(HOME)へ


ストリーミングサーバー(Red5)            2017年6月



C++ RTMP Serverは、配布が停止されたようなので(商用化された?)、Red5に乗り換えることにした。
「Red5は、Javaで書かれたオープンソースのFlash Player向けマルチプラットフォーム・ストリーミングサーバー。 RTMP(Adobe社によって開発されたプロトコル=Real Time Messaging Protocol)に準拠しているため Flash Media Server互換と位置づけられている。」
ブラウザ側では、Flash Playerを作動させ、.swfファイルのクライアントと、動画情報を配信するサーバーとの間で通信することになる。

●インストール
JDKインストール
# yum list installed | grep java  インストール状況の調査。ここではインストール済みだった。
インストールされていない場合は、 # yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel 等

RED5インストール
https://github.com/Red5/red5-server/releases/よりred5-server-1.0.9-M10.tar.gz(2017.05現在)をダウンロード 。
/usr/local/red5ディレクトリを作成して、ここに解凍。
# tar zxf red5-server-1.0.9-M10.tar.gz

起動
# cd /usr/local/red5/red5-server
# ./red5.sh &
停止
# ./red5-shutdown.sh &

サービスで起動CentOS7の新機能参照)
/usr/local/red5/red5-server/red5.serviceを/etc/systemd/system/にコピー、編集
[Unit]
Description=Red5

[Service]
Type=simple
#ExecStart=/etc/init.d/red5  ←下に変更
ExecStart=/usr/local/bin/red5.sh

[Install]
WantedBy=multi-user.target
編集したら、# systemctl daemon-reload

起動スクリプト/usr/local/bin/red5.shの作成(実行可にしておくこと)
#! /bin/sh
#
# /etc/init.d/red5
#

RED5_DIR=/usr/local/red5/red5-server

cd $RED5_DIR
$RED5_DIR/red5.sh

red5の起動と停止
# systemctl start red5 (起動するまで少し時間がかかる)
# systemctl stop red5
# systemctl status red5 (状態の表示)

firewalldの設定
1935がRTMPのポートで、5080がデモページのポート。
ここでは、デモは内部LANのみで使用することにし、1935ポートだけ公開。
# firewall-cmd --add-port=1935/tcp --zone=external --permanent
# firewall-cmd --reload

●デモアプリを試してみる
サーバー自体からhttp://localhost:5080/ へアクセスすると、red5のページが開く。
トップページ中ほどに「Install a ready-made application」というリンクがあるのでクリック。
「oflaDemo」をインストールする。flashのインストールが求められる。rpmを選択した。

見るには、「http://サーバーのアドレス:5080」=Red5トップページから「Launch a demo」>「OFLA Demo」>「classic demo」へと進む。
砂嵐のデモ画面が開くので、右上のテキストボックスのアドレスを適宜変更して「connect」を押す。
たとえば他のPCからは(flashが必要)、「rtmp://localhost/oflaDemo」を「rtmp://サーバーのアドレス/oflaDemo」 に変更。
そうすると動画の一覧が表示されるので、クリックすると動画再生が始まる。
動画の場所は [red5インストールディレクトリ]/webapps/oflaDemo/streams/
試しに別の.flvや.mp4動画を入れてみる。
動画を配置したら、disconnect>connect で接続し直すと一覧に表示される。

●ブラウザに配信するプレイヤーの準備
mp4形式等の動画を配信するために、動画プレイヤーにフラッシュプレイヤーを使用する。無料で使えるフラッシュプレイヤーで、ストリーミングに対応しているプレイヤーとして、Flowplayerがあります。
ダウンロードはwindowsで行い、FTPでアップロードした。

以下のURLからFlowplayer Flash版をダウンロード。
https://flowplayer.org/download/
flowplayer-7.0.4.zip(2017.05現在)

ダウンロードしたファイルを解凍し、これを、公開ディレクトリ、たとえば/var/www/html/red5-test配下に配置します。
/var/www/html/red5-test
 + /flowplayer-7.0.4
 |  flowplayer.js
 |  flowplayer.min.js
 |  flowplayer.swf

動画を見るためのページを作成します。
ここでは、公開ディレクトリ /var/www/html/red5-testの直下にindex.htmlというファイル名で作成します。
/var/www/html/red5-test/flowplayer-7.0.4にindex.htmlのひな形があるので、これをコピーして編集。

flowplayerのテスト
動画ファイル(例 sample.mp4等 )を/var/www/html/red5-test/media に配置。
/var/www/html/red5-test/index.html を以下のように編集します。
<!doctype html>

<head>
<link rel="stylesheet" href="flowplayer-7.0.4/skin/skin.css">
<script src="//code.jquery.com/jquery-1.11.2.min.js"></script>
<script src="flowplayer-7.0.4/flowplayer.min.js"></script>
</head>

<body>
<div style="display:block; width:640px; height:300px" class="flowplayer" data-swf="flowplayer-7.0.4/flowplayer.swf" data-ratio="0.4167">
<video>
  <source type="video/mp4" src="media/sample.mp4">
</video>
</div>
</body>

これは、次のようにも書ける(body部分)、

<div id="player01" style="display:block; width:640px; height:300px" class="flowplayer" data-swf="flowplayer-7.0.4/flowplayer.swf" data-ratio="0.4167"></div>
<script>
<!--
flowplayer("#player01", {
  autoplay: false,
  //aspectRatio: "12:5",
  clip: {
    sources: [
      {type: "video/mp4", src: "//www.my-dom.xxx/red5-test/media/sample.mp4"}
    ]
  }
});
//-->
</script>

ただしこの例では、rtmpserverはまだ利用していない。Flowplayerだけで配信している。

●rtmpserverを使った配信
リアルタイム・ストリーミングの一つのRTMP (Real Time Messaging Protocol)は長時間の動画に向いています。ユーザーがどこからでも再生できて、巨大なファイルを丸ごとダウンロードしなくてもいいのです。それにコンテンツの保護にも都合が良く、ユーザーは直接、自分のハードディスクにコピーできません。
※ flowplayer自体の性能もかなりよくて、単独でも似たようなことができるようになっている。(プログレッシブ・ダウンロード方式=順次ダウンロードしながら再生する。)

動画ファイル(例 test.flv等 )を/usr/rocal/red5/red5-server/webapps/oflaDemo/streams に配置。

/var/www/html/red5-test/index.html
<!doctype html>

<head>
<link rel="stylesheet" href="flowplayer-7.0.4/skin/skin.css">
<script src="//code.jquery.com/jquery-1.11.2.min.js"></script>
<script src="flowplayer-7.0.4/flowplayer.min.js"></script>
</head>

<body>
<div style="display:block; width:640px; height:300px" class="flowplayer" data-swf="./flowplayer-7.0.4/flowplayer.swf" data-ratio="0.4167">
<video>  ←<video autoplay="true">とすると自動再生になる
  <source type="video/flv" src="rtmp://www.my-dom.xxx/oflaDemo/test.flv">
</video>
</div>
</body>

これは、次のようにも書ける(body部分)、

<div id="player02" style="display:block; width:640px; height:300px" class="flowplayer" data-swf="flowplayer-7.0.4/flowplayer.swf"></div>
<script>
<!--
flowplayer("#player02", {
  autoplay: false,
  aspectRatio: "12:5",
  clip: {
    sources: [
      {type: "video/flv", src: "rtmp://www.my-dom.xxx/oflaDemo/test.flv"}
    ]
  }
});
//-->
</script>


ライブ配信(生放送)
ライブのテスト1
 配信
  Webカメラを接続したPCから、「http://サーバーのアドレス:5080」=Red5トップページから「Launch a demo」
  →「Simple BroadcasterのView demo」。
  「rtmp://localhost/oflaDemo」を「rtmp://サーバーのアドレス/oflaDemo」に変更して接続。
 配信を見る
  「http://サーバーのアドレス:5080」=Red5トップページから「Launch a demo」→「Simple SubscriberのView demo」。
  「rtmp://localhost/oflaDemo」を「rtmp://サーバーのアドレス/oflaDemo」に変更して接続。

配信ツール(webカメラの映像をサーバーに送るツール Windows PCにインストール)
 エンコーダーOBS(Open Broadcaster Software)のダウンロードとインストール
 OBSの公式サイトhttps://obsproject.com/からダウンロードし、インストールします。
 OBS-Studio-19.0.2-Full-Installer.exe(2017.05現在)

 『設定」メニューから「配信」。
  配信種別 カスタムストリーミングサーバー
  URL rtmp://サーバーのアドレス/oflaDemo
  ストリームキー testlive (適当な名称を付けておく)
 ソース  枠内を右クリック、追加で「映像キャプチャデバイス」と「音声入力キャプチャ」を選択。

ライブのテスト2(OBSから配信を受け取る)
 配信
  OBSから「配信開始」
 配信を見る
  「http://サーバーのアドレス:5080」=Red5トップページから「Launch a demo」→「PublisherのView demo」。
  「Name」をOBSで設定したストリームキー「testlive」に変更。
  「Location」を「rtmp://サーバーのアドレス/oflaDemo」に変更。
  「Connect」→「Play」ボタン。

ライブ本番(OBSからの生配信を見る)
/var/www/html/red5-test/index.html
<!doctype html>

<head>
<link rel="stylesheet" href="flowplayer-7.0.4/skin/skin.css">
<script src="//code.jquery.com/jquery-1.11.2.min.js"></script>
<script src="flowplayer-7.0.4/flowplayer.min.js"></script>
</head>

<body>
<div id="player01" style="display:block; width:640px; height:300px" class="flowplayer" data-swf="flowplayer-7.0.4/flowplayer.swf" data-ratio="0.4167"></div>
<script>
<!--
flowplayer("#player01", {
  autoplay: false,
  live: true,
  clip: {
    sources: [
      {type: "video/flv", src: "rtmp://www.my-dom.xxx/oflaDemo/testlive"}  ←「testlive」はストリームキー
    ]
  }
});
//-->
</script>
</body>



TOP(HOME)へ

目 次

特別企画
Raspberry Piで遊ぶ

HOME(全体のシステム構成&目次)

CentOS7
CentOS7のインストール〜ネットワークの設定ほか
CentOS7の新機能(systemdとfirewalld)
ダイレクトルールを使ったfirewallの強化
DNS(BIND)サーバー
Webサーバー
  Webでファイルの受け渡し
  アクセス解析ツールAwstats
  Wordpressでブログ構築
  EC-CUBEショッピングサイト構築
FTPサーバー
FTPS(FTP over SSL/TLS)
Mail(Dovecot&Postfix)サーバー
Sambaサーバー
MariaDB(MySQL)サーバー
DHCPサーバー
SSHサーバー
VNCサーバー
ストリーミングサーバーRed5
ドメインの追加

CentOS5〜6
ネットワーク&ファイアウォール(iptables)
DNS(BIND)サーバー
DHCPサーバー
メールサーバー(基本)
メールサーバー/実際の運用
Webサーバー
  WebDAVによるファイル共有
  Webでファイルのやり取り
  アクセス解析ツールawstats
  namazuで全文検索
  WordPressブログサイト構築
  EC-CUBEショッピングサイト構築
FTPサーバー
ファイルサーバー・Samba
データベースpostgreSQL
  ExcelからpostgreSQLを操作
データベースMySQL
SSHサーバー
VNC
SSL/TLSを利用した暗号化通信
openVPN
ストリーミングサーバー
    C++ RTMP Server
    Helix server Basic
ドメインの追加
Xen・仮想化
特定ディレクトリに容量制限

SELinux
SELinux基本設定
audit2allowを使い問題の解決
新しいタイプとポリシー・モジュールを作成してみる
マクロを利用したteファイルの記述
新しいドメインを導入してみる

coLinux
Fedora11で試す

Cプログラミング目次
X11プログラム
サイエンス・プログラム

計測・プログラム
秋月電子のデーターロガーpico ADC-16
「今すぐ使えるパソコン計測USBマイコン基板」に付属のTRZ1102
センサーの使用例

Glade2/GTK+を使ってみる
テキスト・ビューで簡易エディター
ドローイングエリアで自動描画
放物線運動(pango、cairoも試してみる)
これらを、GTK+のみで書き出す

フォントについて
ネットワーク・プログラミング
postgreSQL接続
CGI
ファイル操作

●その他
印刷機関連開発 刷版絵柄面積率測定
数独をExcelで解く