Multimedia

はてなブックマークに移行済み(20101229)

[ はじめに ]

    Linux でMultimediaを再生するには、VLCや、xine系、mplayer系があります。
    以下のプレイヤーのいずれかでほとんどの形式は問題なく再生出来ると思います。


[ 問題と原因 ]

    FLV形式のフォーマットの再生、
    または、スライドバーによる早送り、巻き戻しのジャンプの
    サポートについての情報が不足していること。
    (VLCでは時間を指定してのジャンプは可能)

    OpenSourceではなく、バイナリのみを提供していること。
    バイナリのバイナリのみの提供提供ユーザが使用許諾書に同意する必要があるため、
    事前にインストールしておくことが困難なこと。
    また、配布の制限としてデバイスでの配布の場合、ライセンス料および別のライセンス条件が適用される可能性があること。
    スタンドアロン形式のみで配布する必要があることなどが挙げられます。

    このため、non-freeパッケージをインストールしないポリシーがあるクライアントで使用する場合や
    ISOイメージで使用する場合に問題となります。

    Adobe    http://www.adobe.com/jp/products/flashplayer/
    licencing  http://www.adobe.com/jp/products/players/fpsh_distribution1.html

[ 対策 ]

    FLVをサポートする方法は大きく分けて3つの方法があります。

    1.サーバ側でインストール、提供されたサービスを利用する。
    2.クライアント側でインストール、サービスを利用する。
    3.metaデータを埋め込むFLVエンコーダを開発して、ディストリビューションやISOイメージに導入してもらう。

    例外としては、別の再生可能な形式に変換してしまうか、
    FLVの再生には使わないというところでしょうか。


[ サーバ側のサービスを利用する ]
    インストール方法はクライアントと共通です。

    1.VNC等のリモートサービスを利用する。

       リモートサーバ側の全機能を使えるため、
       VNC等のリモートサービスを利用するための
       クライアントサービスが入ったISOイメージで起動しても問題無く利用可能です。

       サウンドサーバの設定に手間がかかります。

    2.ssh-terminal + X window サポートでリモートサービスを利用する。

       リモート側のplug-in導入済みのブラウザを使う、
       FLVを利用可能なアプリケーションを使う、
       リモート側でFLVを変換する。

       FLVを変換するプログラムを導入する場合に手間がかかります。

    3.リモート側のwebサーバで対応する。

       webサービスとして検証済みのplug-inをインストールするためのHPを作成し、
       そこにアクセスすることでサービスを提供します。

       plug-inの動作検証と、セキュリティの管理、webサーバの管理等の管理に手間がかかります。

[ クライアント側のサービスを利用する ]

    通常インストールのクライアントや、上記のようなサービスを提供するサーバの場合は
    一度設定、自動更新にすると、管理のほとんどの手間が省けます。

    debianの場合、「apt-cache search flashplugin-nonfree」で確認出来ます。

[ ブラウザにインストール ]

    「apt-get」や「yum」でnonfreeパッケージが使用出来る場合は、そちらを優先します。

    knoppixnの場合、デフォルトではコマンドラインのapt-getには対応していませんが、kpackageで対応可能です。

補足

    md5sumコマンドで改竄やエラーがないか確認する仕組みが必要です。
    また、クライアントとして使用するPCの動作検証を行っていることが配布前の前提条件です。
    最新のアップデートやセキュリティ情報をCERTやディストリビュータ、配布元のAdobeから入手する仕組みが必要です。
[ ssh + X window の利用 ]

    ブラウザのインストールに加え、sshdの設定とサービスの提供が必要です。

補足

    ブラウザ、plug-in、sshd、Xと適切なサーバの設定と管理が必要です。
    また、クライアント側でもsshクライアント、Xの適切な設定と管理が必要です。

[ VNC の利用 ]
    ブラウザのインストールに加え、VNCの設定とサービスの提供が必要です。

補足

    VNCサーバとクライアントの適切な設定と管理が必要です。
    また、それぞれのPCのセキュリティ管理が必要です。

[ Multimedia Player の管理 ]

    以下のようなワンライナーで確認出来ます。

    インストールされていない場合は「apropos」の代わりに
    「apt-cache search」(apt をパッケージ管理に使っている場合)を使って確認出来ます。

    「 echo "xine mplayer vlc vls" | for list in `xargs`;do echo "[ $list ]";apropos "$list" | grep -v "xinetd";done | more」


[ FLVを別のフォーマット形式に変換する場合 ]

    それぞれ使い方などが異なりますが、
    出来るだけ共通のアプリケーションを使うことをお勧めします。

Windows   ffmpeggui using MFC support winxp/2000  
FFConverter
vector
窓の杜
Linux ffmpeg
transcode
sourceforge.jp
MacOS ffmpeg
transcode
vector for mac
macfan.net

[ WinXP + FFConverter の場合 ]

1.[Input]にFLVファイル名を指定
   [Output]に出力用のディレクトリを指定
   (ファイル名は「output.???」 -> ???はファイルの種類に依ります。)

「Input Infomation」を参考に以下のように設定して「Encode」ボタンをクリック
DOS画面でエンコードを開始、DOS画面が閉じたら変換完了です。
画面上では「My Documents」以下のファイル名を意図的に消しています。

    Video

    Container = mpg/avi/mp4/m4v/3gp ... etc
    Video Codec = mpeg2/h264 ... etc
    Bit rate = 467
    Frame rate = 30

    Audio

    Audio Codec = copy/mp3(libmp3lame)/aac(libfaac)/ac3/wav ... etc
    Audio Bitrate = 48
    Sampling Frequency = 22,050

メイン画面

インフォメーション

オプション画面

[ Linux + ffmpeg の場合 ]


    「apt-get install ffmpeg ffmpeg-dbg ffmpeg-doc」でインストールします

    「ffmpeg -formats | more」で使用可能なフォーマットを確認します。
    以下に使用出来る主なオプションを表示します。

    ...と思ったのですが、以下の2つで目的を満たしてしまっているので、特に指定しないことにします。
    高画質や高圧縮など設定を変えたい場合は、manマニュアルを参照します。

    $ ffmpeg -i input-file.flv output-file.mpg
    $ ffmpeg -i input-file.flv outputfile.avi



    例えばスペースなどの特殊文字や、「.flv.flv」などを修正したあとのファイルがあるディレクトリなら
    ほとんどの場合、以下のスクリプトで十分です。

    echo *.flv | for list in `xargs`; \
    do \
       ffmpeg -i "$list" -sameq $(echo "$list" | sed s/"\.flv"/"\.mpg"/) || \
       echo "Error : $list" >> ffmpeg_error.txt; \
    done

    うまくいかない場合はflvtool2を使います。
    小数点を省いたり、単位が違う場合のkの追加や、テンプレートに無いレートの場合、
    -vcodec、-acodecの追加等の変更部分は手で修正が必要ですが、ヒントにはなると思います。
    後はman マニュアルを参照してください。

    $ apropos flv;whereis flvtool2;apropos ffmpeg;whereis ffmpeg

    $ for list in $(cat ffmpeg_error.txt | cut -d: -f2);do \
       flvtool2 -P "$list" 2>&1 | \
       grep "audiosamplerate\|asudiodatarate\|framerate\|height\|width\|videodatarate" | \
       sed s/"audiosamplerate:"/"\-ar"/ | \
       sed s/"audiodatarate:"/"\-ab"/ | \
       sed s/"framerate:"/"\-r"/ | \
       sed s/"height: "/"x"/ | \
       sed s/"width:"/"-s"/ | \
       sed s/"videodatarate:"/"-b"/ | \
       sort | \
       xargs echo -n | \
       sed s/" x"/"x"/; \
       echo ""
    done


Windows用のFFConverterと比較したオプション一覧です。

Container  = [ output-file ]    file format = user specifies (File Formats)   
Video Codec  = [ -vcodec codec ]    codec = "copy" or other (Codecs)   
Bit rate  = [ -b ]   default = 200 kb/s   
Frame rate  = [ -r ]   default = 25 fps
Audio Codec  = [ -acodec codec ]    copy = "copy" or other (Codecs)   
Audio Bitrate  = [ -ab bitrate ]   default = 64k   
Sampling Frequency    = [ -ar freq ]   default = 44100 Hz   
other option
   = [ -s size ]    default = 160x128   
   = [ -sameq ]    same video quality as source   
   = [ -vn ] disable video recording   
   = [ -an ] disable audio recording   


[ シークのサポートについて ]

    Player側、エンコーダ、FLVファイル側のそれぞれがサポートしている必要があります。

    Player側のシークバーでのシークについては、
    「キューポイント」によるコントロールがサポートされている必要があります。

    時間指定のシークについては、
    「キューポイント」によるコントロールのサポートが無くても出来ます(VLCの場合)。

    FLVの場合の「キューポイント」の内容は、
    [キューポイントの名前]と[時刻]と[ナビゲーション]、それと省略可能なオプションの4つのため、
    FLVファイル側に設定が埋め込まれているかいないか、
    エンコーダはFLVファイルに設定を埋め込ることが可能かどうかがポイントです。

    時刻を渡せる「時間指定のシーク」は一般に標準で対応しています。
    「シークバー」によるシークのサポートにはキューポイントが必要ということです。

    つまり、一つでもFLVファイルがシーク可能であれば、Player側の問題ではないということです。
    裏を返すと「キューポイント」を埋め込まないエンコーダがあることが問題ということです。

    Action Scriptの詳細をAdobe社が提供してくれていることが不幸中の幸いです。
    FLV形式の動画再生は、シークについては信頼出来ないフォーマットだと言ってよいと思います。
    もちろん、シーク不要なStreaming用途の場合は、不要な「キューポイント」のmetaデータ分を節約出来ます。

    Adobe社もmetaデータに設定可能な情報はエンコーダによって変わりますと言っていますので、
    シークの問題は自分で解決するしか無いということです。


補足

    フレーム数 × 秒数なので、フレーム数がKB単位で整数値の場合は問題ありません。
    フレーム数が整数値で無い場合はシークによるズレが生じる可能性があります。
    一般に、音声のレートもKB単位で見ると整数値ではありません(22.05k/44.1k等)。

    キーフレームは基準のフレームです。これに対して差分フレームは基準フレームからの差分です。
    キーフレームからの変更が少ない=差分フレームが小さい場合に圧縮率が高くなります。

    高圧縮や、キーフレームの設定によってはズレが生じることもあります。
    UIからのコントロールのため、応答速度が原因の場合もあります。



主な関連コンポーネント:FLVPlayback、VideoPlayer

FLVファイル側では、「FLVPlayback.totaltime」を設定します。

$ flvtool2 -UP input-file.flv

Windowsの場合

FLV MetaData Injectorを使います。

FLV splitterというソフトもあるようです。

Flash Playerヘルプ
Flash Playerドキュメンテーション
Flash Playerデベロッパーセンター
ビデオメタデータの使用
キューポイントの埋め込み(概要)
キューポイントの埋め込み(ActionScript)
FLVPlaybackコンポーネント

動画変換
mp4/libx264、キーフレーム、Flash再生時のシーク動作の改善



[ FLVエンコーダを開発して、ディストリビューションやISOイメージに導入してもらう ]

    既存のプロジェクトが多数あります。
    SourceForge.jpで探して参加する方が良いでしょう。
    僕ですか?...FLVが好きになったら考えます...。

[ ブラウザのインストールでどうしてもうまくいかない場合 ]

    以下のリンク、またはトップページからFlashPlayerのページに入ります。
    Adobe Flash Player


1.OSの選択

オペレーションシステムの選択

2009/01/03 現在、サポートされているOSの一覧です。

    Windows 7/Vista/XP/2008/2003/2000
    Windows 98/ME
    Macintosh OS X 10.4 - 10.6
    Macintosh OS X 10.1 - 10.3
    Linux
    Solaris

2.パッケージの選択

パッケージの選択

3.ダウンロードページ

ダウンロード

4.使用許諾書に予め同意している場合は、
   アドレス(URL)を直リンクするページを貼り付けるか、
   ダウンロード、保存したパッケージのリンクをwebサーバ側で提供します。

企業として行う場合、ライセンシーの申請が必要です。
詳しくはAdobe社の「Adobe Player ライセンシング」をご覧ください。

IEの場合

URL

Firefoxの場合(Mozilla/iceape/iceweasel)

URL


戻る

TOP