5

Speexでエンコードされた *.spx ファイルを Web 上で再生したいと考えています。
しかし、Flash/Flex や Flash Audio コーデックについての知識はありません。一日中 Google で検索した後、いくつかの解決策が得られました。

  1. Speex は FLV コンテナ内のオーディオ コーデックとしてのみ再生可能であるため、FLV コンテナで Speex ファイルをラップする何かを行います。
    Flex で SPX オーディオのみの FLV ファイルを再生できるnetStream.play("audio-only-speex.flv")ようになりました。
    サンプルプロジェクトはありますか?

  2. AS を使用して Spx をデコードします。
    私は以下のページをチェックアウトしましたが、それらはすべて OGG Vorbis をデコードしましたが、Speex はデコードしませんでし

    :( =132
    http://mauft.com/2010/11/ogg-vorbis-in-flash
    Adob​​e は、Alchemy によって移植された AS3 OggVorbis ライブラリも提供しています:
    http://labs.adobe.com/wiki/index.php/Alchemy :ライブラリ

  3. FMS: FMS または Red/Xuggle を使用してサーバー ストリーミングを行います。FMS の話は聞いたことがありませんし、自分の仮想ホストがサポートできるかどうかもわかりません...

  4. すべての Spx ファイルを MP3 に変換します。

最善の解決策は、AS3 で Spx をデコードすることだと思います。はい、Spx Flash Player を作成したいと思います。

そこで、speex.org から Speex Library をダウンロードし、Adobe Alchemy をインストールしました。libspeex の後で、Alchemy を介してlibspeex.swc./configure;makeから libspeex/speex.c をビルドします。次にどうすればいいのかわからない。AS3 で Speex オーディオをデコードするにはどうすればよいですか? 私の libspeex.swc: http://demo.0x123.com/libspeex.swc

また、libspeex.swc をビルドする前に、 Alchemy APIを使用して libspeex を書き直す必要がありますか?

私はASの専門家ではありませんが、学習能力は高いです。アドバイスをいただければ幸いです。どうもありがとうございました。

4

2 に答える 2

1

Adobe は、まだ Alchemy に依存しないように明確に述べているため、(私の知る限り)クライアント側でそれを行う公式の方法はありません。明らかに Speex デコーダーが使用されていることを考えると、それはばかげています。

Xuggle の騙されたバージョンの ffmpeg (http://code.google.com/p/xuggle-ffmpeg/) を使用して、speex を FLV に埋め込むことはできますか? xuggle をバッチまたはオンザフライで実行できる場合は、元のオーディオ形式に関係なく、netStream.play.

ffmpeg -i test.wav -acodec libspeex -f flv -y speex.flv

基本的な再生では、フラッシュ メディア サーバーは必要ありません。

于 2011-12-10T20:49:40.320 に答える
0

Alchemy API を使用して Speex ライブラリを書き直す必要があることがわかりました:
http://labs.adobe.com/wiki/index.php/Alchemy:Documentation:Developing_with_Alchemy:C_API
http://labs.adobe.com/wiki /index.php/Alchemy:Documentation:Developing_with_Alchemy:AS3_API

簡単な helloWorld を作成しました。面倒なのは最初の一歩です。:)

Main.c

#include <stdio.h>
#include "AS3.h"

static AS3_Val addNumber(void* self, AS3_Val args)
{
        double num1 = 0.0;
        double num2 = 0.0;

        AS3_ArrayValue( args, "DoubleType, DoubleType",
                       &num1, &num2);

        double sum = num1 + num2;
        return AS3_Number(sum);
}

static AS3_Val helloString(void* self, AS3_Val args)
{
        char *str = "Hello, Alchemy!";
        return AS3_String(str);
}


int main ()
{

        // define the methods exposed to ActionScript
    // typed as an ActionScript Function instance
    AS3_Val addNumberMethod = AS3_Function(NULL, addNumber);
        AS3_Val helloStringMethod = AS3_Function(NULL, helloString);

    // construct an object that holds references to the functions
    AS3_Val result = AS3_Object("addNumber: AS3ValType, helloString: AS3ValType",
                                    addNumberMethod,
                                    helloStringMethod);

    // Release
    AS3_Release(addNumberMethod);
        AS3_Release(helloStringMethod);

    // notify that we initialized -- THIS DOES NOT RETURN!
    AS3_LibInit(result);

    // should never get here!
    return 0;

}


を使用してコンパイル$ main.c -O3 -Wall -swc -o HelloAlchemy.swc

AS コード:

        import cmodule.HelloAlchemy.CLibInit;
        import mx.controls.Alert;

        private var loader:CLibInit;
        private var lib:Object;

        private function init():void
        {
            loader = new CLibInit;
            lib = loader.init();
        }
        protected function button1_clickHandler(event:MouseEvent):void
        {
            Alert.show(String(lib.addNumber(Number(3),Number(5)))); 
        }

        protected function helloStringButton_ClickHandler(event:MouseEvent):void
        {
            var str:String = String(lib.helloString());
            Alert.show(str);
        }
于 2011-12-12T03:00:59.117 に答える