2013年12月31日

Postfix+Cyrus SASL で SMTP 認証

SMTPサーバーの認証をやらざるをえなくなり、SASL を導入した。
Cyrus SASL はこれまでにも何度か試したけれど、いつも何やら難しそうで途中で放棄していた。
今回は、なんとかやりおおせた。。。

使用した環境は以下のとおり:
OS: CentOS release 6.4 (Final)

1. Cyrus SASL のインストールと設定

SASL ではさまざまな認証機構を選択できるが、あまり複雑なことをやるとハマりそうなので Linux のパスワードファイル /etc/shadow での認証を採用した。
/etc/shadow での認証は、saslauthd で実現できる。
saslauthd は、CentOS の RPM パッケージ cyrus-sasl に含まれている。

PLAIN 認証機構のパッケージ cyrus-sasl-plain もインストールが必要。
# yum install cyrus-sasl cyrus-sasl-plain
saslauthd を実行する前に、/etc/sysconfig/saslauthd ファイルの起動オプションを設定して /etc/shadow での認証を行うようにする。
MECH=shadow
起動してみる。
# service saslauthd start
saslauthd での認証がうまくいくかどうかは、testsaslauthd コマンドで確認できる。
# testsaslauthd -u ユーザ名 -p パスワード
0: OK "Success." と表示されれば成功。

Postfix の SMTP 認証のために saslauthd は起動させておく必要がある。
chkconfig で on に設定しておこう。
# chkconfig saslauthd on

2. Postfix の設定

Postfix の SASL 認証は、SASL ライブラリーを経由して行っている。
SASL ライブラリーの設定ファイル /etc/sasl2/smtpd.conf を以下のように設定する。
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN

Postfix 本体の設定を以下のようにする。
(設定項目が存在しなければ追加)
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = cyrus
smtpd_sasl_path = smtpd
smtpd_recipient_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_unauth_destination
最後の設定は、リレーを許可するためのもの。
なお、Cyrus SASL ライブラリーは設定ファイルの検索パスから「smtpd_sasl_path の設定値+.conf」というファイル名のファイルを探し出してそれを読み込むので、認証がうまくいかない場合は前述の /etc/sasl2/smtpd.conf ファイルのファイル名と smtpd_sasl_path の設定値が一致しているかどうか確認するとよい。

/etc/postfix/master.cfg ファイルで、-o smtpd_sasl_auth_enable=yes-o smtpd_client_restrictions=permit_sasl_authenticated,reject オプションを有効にする。
smtp inet n - n - - smtpd
#submission inet n - n - - smtpd
# -o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING

Postfix の設定リロードを行って完了。
# service postfix reload
posted by K/I at 18:13 | 東京 ☀ | Comment(0) | TrackBack(0) | 技術メモ | このブログの読者になる | 更新情報をチェックする

SETI@home/BOINC をコマンドラインで実行する (Linux)・改

しばらく貢献を怠っていた SETI@home に久しぶりに参加しようと思い、以前書いた記事「SETI@home/BOINC をコマンドラインで実行する (Linux)」を読み返したものの、さすがに古すぎてほとんど役に立たず。
改めて調べてみた。

使用したOSは CentOS release 6.4 (Final)。
現在は RPM パッケージが用意されており、rc ファイルも完備されているので操作が楽になっている。

1. BOINCクライアントのインストール

rpm パッケージが用意されているので、yum 等でインストールする。
# yum install boinc-client
インストールが完了したら boinc-client を起動する。
# service boinc-client start

2. SETI@home のプロジェクト登録

まずは、SETI@home のアカウントキーを取得する必要がある。
SETI@home にアカウントを持っている場合には、次のコマンドでアカウントキーを取得できる。
# boinccmd --lookup_account http://setiathome.berkeley.edu/ \
メールアドレス パスワード
まだアカウントを作っていない場合は、次のコマンドを実行する。
# boinccmd --create_account http://setiathome.berkeley.edu/ \
メールアドレス パスワード アカウント名
アカウントキーを取得したら、BOINC デーモンに SETI@home を登録する。
# boinccmd --project_attach http://setiathome.berkeley.edu/ アカウントキー
ステータスは、
# boinccmd --get_results
で確認できる。
posted by K/I at 12:14 | 東京 ☀ | Comment(0) | TrackBack(0) | 技術メモ | このブログの読者になる | 更新情報をチェックする

2013年10月28日

Perl で連想配列の順序をキープする

Perl の連想配列のキーを keys で取得すると、通常は設定順序と異なる順序で返される。
連想配列の順序を保持したい場合は、Tie::IxHash モジュールを使用する。

Tie::IxHash モジュールには TIEHASH インターフェイスが用意されているので、tie 関数と組み合わせて使えば連想配列をあたかも設定順にデータが格納されるかのように扱うことができる。

以下、サンプルコード:
#!/usr/bin/perl
use strict;
use warnings;
use Tie::IxHash;
tie my %hashval, 'Tie::IxHash';
$hashval{ data1 } = 10;
$hashval{ data2 } = 20;
$hashval{ data3 } = 30;
$hashval{ data4 } = 40;
foreach my $k (keys %hashval) {
print "$k = $hashval{$k}\n";
}
これを実行すると、
$ perl ~/tmp/test2.pl data1 = 10 data2 = 20 data3 = 30 data4 = 40
となる。

ためしに7行目を
my %hashval;
に差し替えてみると
$ perl ~/tmp/test2.pl data4 = 40 data2 = 20 data3 = 30 data1 = 10
のようになり、Tie::IxHash の効果が確認できる。
posted by K/I at 16:43 | 東京 ☀ | Comment(0) | TrackBack(0) | 技術メモ | このブログの読者になる | 更新情報をチェックする

2013年06月10日

コマンドラインでのANDROIDアプリのコンパイルと署名

ANDROID アプリは Eclipse を使わずにコマンドラインでコンパイルと署名ができる。
できるのならやってみよう、というわけ。

試した環境は:
CentOS release 6.4
Android SDK Tools r22.0.1

以下、あらかじめ Eclipse で作成したプロジェクトがあることが前提。
プロジェクト名は HelloWorld とする。

1. 作業環境の整備

1.1 Android SDK Tools
まずは、Android Developers のサイトから SDK Tools をダウンロードしてインストールする。
Android Developers
http://developer.android.com/index.html
Develop > Tools > Download のページで、[DOWNLOAD FOR OTHER PLATFORMS] のところにある "SDK Tools Only" から、"Linux 32 & 64-bit" のファイルをダウンロード。
今回は "android-sdk_r22.0.1-linux.tgz" だった。

これを適当なところに展開する。
ここでは /opt ディレクトリの下に展開した。
toolsplatform-tools にパスを通しておいたほうが便利かもしれない。
$ export PATH=$PATH:/opt/android-sdk-linux/tools $ export PATH=$PATH:/opt/android-sdk-linux/platform-tools

設置したら、SDK を更新しておく。
# /opt/android-sdk-linux/tools/android update sdk --no-ui
1.2 Ant
使用した Android SDK Tools の r22.0.1 は、Ant 1.8.0 以上が必要なので、本家サイトからダウンロードしてくる。
Apache Ant
http://ant.apache.org/
Apache Antのサイトの "Binary Distributions" からダウンロードし、適当なディレクトリーに展開する。
ここでは /opt/apache-ant に解凍した。
そして、ANT_HOME に Ant のパスを設定し、ついでにパスも通しておく。
$ export ANT_HOME=/opt/apache-ant $ export PATH=$PATH:$ANT_HOME/bin

2. Android アプリのコンパイル

まずは、Eclipse で作成した Android アプリのパスに移動し、プロジェクトを update する。
$ android update project --target android-16 --path .
ターゲットは project.properties に書かれているものに合わせるといいかも。
local.propertiesbuild.xml の2ファイルが作られ、コンパイルできるようになる。
サブプロジェクトに関するコメントが表示されるがとりあえず無視。

コンパイルしてみる。
$ ant release
そうしたら以下のようなエラーが。。。:
BUILD FAILED /opt/android-sdk-linux/tools/ant/build.xml:650: The following error occurred while executing this line: /opt/android-sdk-linux/tools/ant/build.xml:691: Execute failed: java.io.IOEx ception: Cannot run program "/opt/android-sdk-linux/build-tools/17.0.0/aapt": error=2, そのようなファイルやディレクトリはありません ...
試しに /opt/android-sdk-linux/build-tools/17.0.0/aapt を実行してみると、/lib/ld-linux.so.2 が存在しない、というエラー。
linux.so.2 ファイルは、調べてみると glibc.i686 というパッケージに含まれるらしい。
$ yum provides ld-linux.so.2 Loaded plugins: fastestmirror, security Loading mirror speeds from cached hostfile * base: www.ftp.ne.jp * epel: ftp.iij.ad.jp * extras: www.ftp.ne.jp * updates: www.ftp.ne.jp glibc-2.12-1.107.el6.i686 : The GNU libc libraries Repo : base Matched from: Other : ld-linux.so.2
へぇ、glibc.i686glibc.x86_64 とは別なのか。。。
glibc.i686 をインストールして /opt/android-sdk-linux/build-tools/17.0.0/aapt を実行すると、今度はまた別のライブラリーが存在しないというエラーが。
ひとつひとつつぶしていくと、結局3つのパッケージの追加インストールが必要だった:
# yum install glibc.i686 # yum install zlib.i686 # yum install libstdc++.i686
コンパイルが成功すると bin ディレクトリの中に .apk ファイルが作られる。

3. 署名

3.1 鍵ペアーの生成
Android アプリに署名するための鍵ペアーは、keytool コマンドで生成できる。
keytool は JDK に含まれている。
$ keytool -genkey -v -keystore tan9.keystore -alias HelloWorld \ -dname "CN=Hello World, O=Tan9, L=Shinjuku, ST=Tokyo, C=JP" -keyalg RSA \ -keysize 2048 -validity 10000 -keypass 123456 -storepass 123456 $ keytool -list -keystore tan9.keystore
キーストアーファイルのファイル名 (上記 tan9.keystore)、パスワード (123456 2カ所)、識別名 (CN=Hello World, O=Tan9, L=Shinjuku, ST=Tokyo, C=JP) 等は適当に。
3.2 アプリへのデジタル署名
jarsigner コマンドを使ってアプリにデジタル署名する。
$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 \ -keystore tan9.keystore -storepass 123456 -keypass 123456 \ bin/HelloWorld-release-unsigned.apk HelloWorld 追加中: META-INF/MANIFEST.MF 追加中: META-INF/HELOWORL.SF 追加中: META-INF/HELOWORL.RSA 署名中: res/layout/main.xml 署名中: AndroidManifest.xml 署名中: resources.arsc 署名中: res/drawable-hdpi/ic_launcher.png 署名中: res/drawable-ldpi/ic_launcher.png 署名中: res/drawable-mdpi/ic_launcher.png 署名中: res/drawable-xhdpi/ic_launcher.png 署名中: classes.dex
これで bin/HelloWorld-release-unsigned.apk に署名が施される。
タグ:android Ant
posted by K/I at 00:52 | 東京 ☀ | Comment(0) | TrackBack(0) | 技術メモ | このブログの読者になる | 更新情報をチェックする

2013年05月12日

Cygwin での OpenSSH サーバーの設定

(1) 管理者権限で Cygwin Terminal を開く。
(2) ssh-host-config を実行。
このとき、-y オプションをつけておくと質問に勝手に答えて進んでくれる。
$ ssh-host-config -y
途中、cyg_server ユーザーを作成する箇所でパスワードを聞かれるので入力する。
(3) cygrunsrv コマンドでサービス開始する:
$ cygrunsrv -S sshd
タグ:cygwin OpenSSH
posted by K/I at 18:11 | 東京 ☀ | Comment(0) | TrackBack(0) | 技術メモ | このブログの読者になる | 更新情報をチェックする

2013年01月29日

Qを諦めてVMware fusionに。。。

Windowsマシンを潰してHadoopクラスターに供出したため、Windows 7のライセンスが1つ余った。
これを iMac に仮想マシンとしてインストールしてやろう。
そう思って Q を使ってインストールを試したものの、どうしてもホスト PC の CD-ROM ドライブを認識してくれない。
ブータブルISOイメージを作ろうとしたがこれも失敗。

半日かかって埒が明かず、とうとう諦めてVMware fusionを導入した。
さすがにこれは何の苦労も無くインストール開始でき、現在インストール中。

なんだか悔しい。
タグ:Qemu VMware
posted by K/I at 14:17 | 東京 ☀ | Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2013年01月08日

iTunesでiPhoneとカレンダー同期ができなくなった

先日、今更ながら iMac の OS を Mountain Lion にアップグレードした。
おそらくその時から iPhone の同期がおかしくなっってしまったがく〜(落胆した顔)
iMac 上でカレンダーを更新しても iPhone に反映されないし、iPhone のカレンダーも iMac のカレンダーに反映されない。

いろいろ試したけれど、結局 Apple サイトに情報が書いてあってこれで解決しました:
http://support.apple.com/kb/TS2481?viewlocale=ja_JP&locale=ja_JP
posted by K/I at 15:37 | 東京 ☀ | Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2013年01月03日

完全分散モードの Hadoop 導入手順 (CDH3)

Cloudera's Distrubution for Hadoop (CDH) を利用して、完全分散モードの Hadoop を導入したメモ。
今回は以下の構成とした。
マスターノード (CentOS 5.7)
ホスト名: master
Hadoop の NameNode/JobTracker
スレーブノード (Fedora 14)
ホスト名: slave
Hadoop の DataNode/TaskTracker
SecondaryNameNode は無し。
また、NameNode と JobTracker は分けたほうがよいようだが、今回はとりあえずこれで。
【参考】
  • http://codezine.jp/article/detail/2485
  • http://oss.nttdata.co.jp/hadoop/cdh.html
  • https://ccp.cloudera.com/display/FREE4DOC
  • http://wiki.apache.org/hadoop/
インストール前に、「Supported Operating Systems for CDH3」で CDH3 がサポートする OS かどうか確認しておく。
バージョンにも気をつける必要がある。
衣か、Hadoop のインストールまでは、マスターノード、スレーブノードほぼ共通。

1. Java Development Kit インストール

Java Development Kit (1.6 以上) をインストールする。
今回は、OpenJDK をインストールした。
【RedHat系】
# yum install java-1.6.0-openjdk java-1.6.0-openjdk-devel
【Debian系】
# apt-get install openjdk-6-jdk

2. CDH3 インストール

CDH3 を「CDH3 Installation」の手順に従ってインストールする。
【RedHat系】
# yum --nogpgcheck install http://archive.cloudera.com/redhat/cdh/cdh3-repository-1.0-1.noarch.rpm
# rpm --import http://archive.cloudera.com/redhat/cdh/RPM-GPG-KEY-cloudera
マスターノードの場合:
[root@master]# yum install hadoop-0.20 hadoop-0.20-native \
hadoop-0.20-namenode hadoop-0.20-jobtracker

スレーブノードの場合:
[root@slave]# yum install hadoop-0.20 hadoop-0.20-native \
hadoop-0.20-datanode hadoop-0.20-tasktracker

【Debian系】
# wget http://archive.cloudera.com/one-click-install/squeeze/cdh3-repository_1.0_all.deb
# dpkg -i cdh3-repository_1.0_all.deb
# apt-get update

マスターノードの場合:
[root@master]# apt-get install hadoop-0.20 hadoop-0.20-native \
hadoop-0.20-namenode hadoop-0.20-jobtracker

スレーブノードの場合:
[root@master]# apt-get install hadoop-0.20 hadoop-0.20-native \
hadoop-0.20-datanode hadoop-0.20-tasktracker

3. SSH 設定

マスターノードとスレードノードとは SSH でやり取りするので、パスワード無しで SSH ログインできるようにしておく (秘密鍵をパスワード無しにするか、ssh-agent などを使う)。
hdfs アカウントのホームディレクトリは /usr/lib/hadoop-0.20 に設定されているので、/usr/lib/hadoop-0.20 の下に .ssh ディレクトリを作成し、そこに鍵ペアを作る。
# mkdir /usr/lib/hadoop-0.20/.ssh
# chmod 02775 /usr/lib/hadoop-0.20/.ssh
# chgrp hadoop /usr/lib/hadoop-0.20/.ssh
# ssh-keygen -t rsa -N "" -f /usr/lib/hadoop-0.20/.ssh/id_rsa
# chmod 0660 /usr/lib/hadoop-0.20/.ssh/id_rsa
# chmod 0664 /usr/lib/hadoop-0.20/.ssh/id_rsa.pub
# touch /usr/lib/hadoop-0.20/.ssh/known_hosts
# chmod 0664 /usr/lib/hadoop-0.20/.ssh/known_hosts
# chmod 0755 /usr/lib/hadoop-0.20/.ssh
公開鍵を互いの /usr/lib/hadoop-0.20/.ssh 内に authorized_keys ファイルを作成して書き込み、互いに hdfs アカウントでパスワード無しにログインできることを確認する。
[root@master]# su - hdfs
[hdfs@master]$ ssh slave
[hdfs@slave]$ ssh master
[hdfs@master]$ exit
[hdfs@slave]$ exit
[hdfs@master]$ exit

4. Hadoop 設定

インストールした時点では empy の設定ファイルが設定されているので、これを別のディレクトリ (ここでは conf.cluster とした) にコピーして設定していく。

設定ディレクトリは、alternatives コマンドを使って切り替える。
【RedHat系】
# cp -dpR /etc/hadoop/conf.empty /etc/hadoop/conf.cluster
# alternatives --install /etc/hadoop-0.20/conf hadoop-0.20-conf \
/etc/hadoop-0.20/conf.cluster 50

# alternatives --display hadoop-0.20-conf
【Debian系】
# cp -dpR /etc/hadoop/conf.empty /etc/hadoop/conf.cluster
# update-alternatives --install /etc/hadoop-0.20/conf hadoop-0.20-conf \
/etc/hadoop-0.20/conf.cluster 50

# update-alternatives --display hadoop-0.20-conf

マスターノード、スレーブノードの両方の /etc/hadoop/conf.cluster 内の設定ファイルを、たとえば以下のように書き換える:

設定ファイル: core-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:54310</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/hadoop/tmp</value>
</property>
</configuration>

設定ファイル: hdfs-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/var/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/var/hadoop/dfs/data</value>
</property>
</configuration>

設定ファイル: mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>master:54311</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>/var/hadoop/mapred</value>
</property>
</configuration>

設定ファイル: masters
master

設定ファイル: slaves
slave

環境変数設定ファイル: hadoop-env.sh
# 【RedHat系】
export JAVA_HOME=/usr/lib/jvm/java
# 【Debian系】
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk

対応するディレクトリを作成する。
# mkdir -p /var/hadoop/tmp \
/var/hadoop/dfs/name \
/var/hadoop/dfs/data \
/var/hadoop/mapred

# chown hdfs:hadoop /var/hadoop/tmp \
/var/hadoop/dfs/name \
/var/hadoop/dfs/data

# chown mapred:hadoop /var/hadoop/mapred
# chmod 0777 /var/hadoop/tmp
# chmod 0700 /var/hadoop/dfs/name
# chmod 0755 /var/hadoop/dfs/data \
/var/hadoop/mapred

5. ポートの開放

Hadoop がデフォルトで使用するポート番号が「Hadoop Default Ports Quick Reference」にあるので、必要に応じてルーターやファイアウォール等の設定を変更する。

6. NameNode / DataNode の起動

マスターノードで、NameNode をフォーマットする。
[root@master]# su - hdfs
[hdfs@master]$ hadoop namenode -format
[hdfs@master]$ exit

ここで以下のようなエラーが出る場合は、環境変数 JAVA_HOME が正しく設定されていない可能性がある:
+======================================================================+
|      Error: JAVA_HOME is not set and Java could not be found         |
+----------------------------------------------------------------------+
| Please download the latest Sun JDK from the Sun Java web site        |
|       > http://java.sun.com/javase/downloads/ <                      |
|                                                                      |
| Hadoop requires Java 1.6 or later.                                   |
| NOTE: This script will find Sun Java whether you install using the   |
|       binary or the RPM based installer.                             |
+======================================================================+

マスターノードの NameNode、スレーブノードの DataNode を起動する。
マスターノード:
[root@master]# service hadoop-0.20-namenode start
スレーブノード:
[root@slave]# service hadoop-0.20-datanode start
NameNode、DataNode が稼働しているかどうかは、ブラウザーで以下の URL にアクセスすることで確認できる。
http://master:50070/
"Live Nodes" の数値が稼働している DataNode の数。

7. JobTracker / TaskTracker の起動

マスターノードの HDFS 上に /mapred/system ディレクトリを作成する。
[root@master]# su - hdfs
[hdfs@master]$ hadoop fs -mkdir /mapred/system
[hdfs@master]$ hadoop fs -chown -R mapred:supergroup /
[hdfs@master]$ hadoop fs -chmod -R 0700 /mapred
[hdfs@master]$ exit
マスターノードの JobTracker、スレーブノードの TaskTracker を起動する。
マスターノード:
[root@master]# service hadoop-0.20-jobtracker start
スレーブノード:
[root@slave]# service hadoop-0.20-tasktracker start
JobTracker、TaskTracker が稼働しているかどうかは、ブラウザーで以下の URL にアクセスすることで確認できる。
http://master:50030/
Cluster Summary の "Nodes" の数値が稼働している TaskTracker の数。

8. サンプルコードの実行

パッケージにはサンプルコードが添えられているので試しに実行してみる。
[root@master]# su - mapred
[mapred@master]$ cd /usr/lib/hadoop
[mapred@master]$ hadoop jar hadoop-examples.jar pi 1 10 【変更履歴】 2013-01-22 記述全体を手直し
タグ:Hadoop CDH
posted by K/I at 01:06 | 東京 ☀ | Comment(0) | TrackBack(0) | 技術メモ | このブログの読者になる | 更新情報をチェックする

2012年12月10日

PHPでメール送信エラーを取得する

SMTPサーバーと直接対話してメール送信する PHP コード誰か書いていないかな?と探してみたら、ありました。
『KLab若手エンジニアの これなぁに?』というブログの「SMTPクライアントを書いてみた
ありがたや。

HELO コマンドは自ホスト名を投げるのが正しいと思うのと、EHLOを使うのがよいようなのでその部分を改変し、メールヘッダーのところをちょっといじって、エンコーディングの扱いを工夫すれば使えそう。
posted by K/I at 16:19 | 東京 ☀ | Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2012年10月04日

Flash Media Serverでの動画ライブ配信

先日の記事で Flash Media Server をインストールしたが、それだけでは動画のライブ配信はできない。
今回は、Flash Media Live Encoder を使ってライブ配信を試してみたい。
【関連記事】

※動画ストリーミング配信には Flash Player 10.1 以上が必要なので、もしインストールしていなければインストールしておく。

1. Flash Media Live Encoderのインストール

まず、AdobeのホームページからFlash Media Live Encoderを探し、ダウンロード&インストールする。

Flash Media Live Encoder #01

必要であれば、認証アドオンもダウンロード&インストールする (今回は行わなかった)。
Flash Media Live Encoder #02

Flash Media Live Encoder #03

Flash Media Live Encoder #04

Flash Media Live Encoder #05

Flash Media Live Encoder #06
※キャプチャー画像は Mac OS X のものだが、Windows でも手順は同じ。

2. Flash Media Encoderの設定

以下の設定手順は HTTP 経由でシングルストリームのライブ配信する場合のもの。
Flash Media Server のホスト名は test.jp とする。
  1. Flash Media Live Encoder は閉じておく。
  2. Flash Media Live Encoder の設定ファイル
    (インストール先)\conf\config.xml
    をテキストエディタで開き、タグ
    //flashmedialiveencoder_config/mbrconfig/streamsynchronization/enable
    true にして保存する。
  3. Flash Media Live Encoder を起動する。
  4. "Encoding Options" パネルの [Preset] プルダウンから "High Bandwidth (800 Kbps) - H.264" を選ぶ。
  5. [Audio]-[Format] は "AAC" を選ぶ。
    ※と、Adobe のサイトには書かれているが、"Mp3" でもうまくいくみたい。
    Windows 版で "AAC" 使うには別途エンコーダー (有料) が必要。
  6. [Video]-[Format] の右にあるレンチアイコンをクリックして "Advanced Encoder Settings" ダイアログを開き、[Keyframe Frequency] を "4 seconds" とする (この値は、applications/livepkgr/events/_definst_/liveevent/Event.xml の <FragmentDuration> の値 (デフォルト値 4000 ミリ秒) の整数倍にする)。
  7. [Stream to Flash Media Server]-[FMS URL] に "rtmp://test.jp/livepkgr" と入力する。
  8. [Stream to Flash Media Server]-[Stream] に "livestream?adbe-record-mode=record&adbe-live-event=liveevent" と入力する。
  9. [Stream to Flash Media Server]-[Save to File] のチェックをはずす。
  10. [Start] ボタンをクリックする。
Flash Media Server の Administartion Console の View Applications の Streams にストリームが表示されれば準備完了。
Flash Media Live Encoder #07

3. 埋め込み用コードの作成

Flash Media Server のインストール先にある samples/videoPlayer ディレクトリを Web 経由で見られるところにコピーする (ここでは http://test.jp/fms/samples/videoPlayer とする)。
そして、Web ブラウザーで
http://test.jp/fms/samples/videoPlayer/videoplayer.html
にアクセスする。
Flash Media Live Encoder #08
動画エリアの下の "STREAM YOUR OWN VIDEO" の [STREAM URL] に
http://test.jp:8134/hds-live/livepkgr/_definst_/liveevent/livestream.f4m
と入力し、[LIVE] にチェックを入れて [PLAY STREAM] ボタンをクリックする。
正常に設定できていれば動画エリアにライブ映像が表示される。

表示されない場合は、[STREAM URL] に入力した URL を直接 Web ブラウザーで表示させてみる。
正しければ、XML 形式のマニフェストファイルが表示されるはずである。

ページ下部に埋め込み用コードが表示されるので、それをコピーして任意のページにペーストすれば、ライブ配信ページが作れる。
Flash Media Live Encoder #09

コードを見ればわかるとおり、
swfs/StrobeMediaPlayback.swf
が必要なので、このファイルを適当な場所に設置して使う。

なお、サーバーが Development Server の場合は映像は30分で切断される (10分という記述を見かけたが、試したら30分だった)。

4. トラブルシューティング

4.1. Flash Media Playback Setup でエラーとなる
上記の例では Flash Media Server 同梱のサンプルコードを使って埋め込みコードを生成したが、Flash Media Playback Setup ( http://www.osmf.org/configurator/fmp/ ) も利用できる。
Flash Media Playback Setup で "We are having problems with..." というエラーが出る場合は、クロスドメインポリシーを疑ってみる必要がある。
【参考】
さわいじり
クロスドメインポリシーファイル(crossdomain.xml)設定について
クロスドメインポリシーは、Flash Media Server の (インストール先)/webroot/crossdomain.xml というファイルで設定される (デフォルト設定の場合)。
このファイルで、www.osmf.org からのアクセスが許可されているか確認する。
もしファイル自体が存在しなければ自前で作成する。
内容は以下のようなもの。
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM
"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>
上記の例では、あらゆるドメインからのアクセスを許可している。
4.2. Buffering... と表示されたまま映像が表示されない
原因はいろいろあるらしいが、一度ハマると解決しにくいのが以下の例。

Flash Media Live Encoder の [Stream] の 値を livestream?adbe-live-event=liveevent (これが Adobe の解説に書かれている設定値) としている場合、配信時間が 30 分を超えると Flash Media Server のログ (logs/core.00.log) に:
Failed to record livestream (disk quota exceeded).
というエラーが出て動画配信ができなくなる。

こうなった場合は、
applications/livepkgr/streams/_definst_/livestream
内のファイルをすべて削除してサーバーを再起動すれば、また配信できるようになる。

[Stream] の値を "livestream?adbe-record-mode=record&adbe-live-event=liveevent" に変更して配信しなおしても解消する。
posted by K/I at 23:34 | 東京 ☁ | Comment(12) | TrackBack(0) | 技術メモ | このブログの読者になる | 更新情報をチェックする