2

最後に、ストリーム ビデオ レコーダー フラッシュ アプリケーションとそのシンプルな Red5 バックエンドを作成しましたが、もちろん Red5 はまた冗談です。ほとんどの場合、記録されたビデオは破損しており、ランダムに停止して再開せずに再生することはできず、プレーヤーがぶら下がっています..そして私も. なぜこれを行うのですか?

私はインターネットを調査し、この問題を見つけましたが、解決策はありません! ビデオを録画せずに、ライブに切り替えて ffmpeg を接続して汚い仕事をしようとしましたが、当然、ffmpeg は red5 の出力に次のエラー メッセージが表示されて接続できませんでした。

呼び出しの実行エラー: サービス: null メソッド: play Num Params: 1 0: my_little_stream ... blabla bla

Xugglerのものを統合して本当にしたくないことを試す前に、どうすればよいか、どうにかして ffmpeg をアタッチできますか、または red5 サーバーに変更する必要がある構成がありますか..または何か! ありがとう!

編集:Red5 1.0 RC2を使用しています

編集#2:red5 1.0.0rc2サーバーファイルを使用してトランクソースからoflaDemoアプリをコンパイルし、ffmpegレコーダーが機能するかどうかを試すためだけに、単純なフレックスアプリでライブストリームを作成しました。これで red5 に接続できましたが、結果は同じです! ビデオが壊れているようです...

4

2 に答える 2

3

*でも、packetReceived() 関数には何を入れればよいのでしょうか? *

これを別の回答に追加して、正しく強調表示します。

パケットをディスクに書き込むには、次のものが必要です。1) パケット、2) パケットを ITag に変換する、3) ITagWriter のインスタンスを取得する

1) パケット データ http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/flvrecord/listener/StreamVideoListener.java?view=50 行付近のマークアップ

public void packetReceived(IBroadcastStream broadcastStream,
  IStreamPacket streampacket) {

}

streampacket => ディスクに書き込みたいパケット。

2) パケットを ITag に変換して書き込む

http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/flvrecord/listener/async/StreamVideoWriter.java?view= 行 90ff 付近のマークアップ

        IoBuffer data = streampacket.getData().asReadOnlyBuffer();

        if (data.limit() == 0) {
            return;
        }

        if (startTimeStamp == -1) {
            // That will be not bigger then long value
            startTimeStamp = streampacket.getTimestamp();
        }

        timeStamp -= startTimeStamp;

        ITag tag = new Tag();
        tag.setDataType(streampacket.getDataType());

        // log.debug("data.limit() :: "+data.limit());
        tag.setBodySize(data.limit());
        tag.setTimestamp(timeStamp);
        tag.setBody(data);

        writer.writeTag(tag);

3) Writer のインスタンスの取得

http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/flvrecord/listener/async/BaseStreamWriter.java?view= 行 90ff 付近のマークアップ

protected ITagWriter writer = null;

private void init() throws IOException {
    file = new File(OmFileHelper.getStreamsSubDir(this.scope.getName()), this.streamName + ".flv");

    IStreamableFileFactory factory = (IStreamableFileFactory) ScopeUtils
            .getScopeService(this.scope, IStreamableFileFactory.class,
                    StreamableFileFactory.class);

    if (!this.file.isFile()) {
        // Maybe the (previously existing) file has been deleted
        this.file.createNewFile();

    } else if (!file.canWrite()) {
        throw new IOException("The file is read-only");
    }

    IStreamableFileService service = factory.getService(this.file);
    IStreamableFile flv = service.getStreamableFile(this.file);
    this.writer = flv.getWriter();

}

したがって、これは大まかな手順です。そういう意味では、次に進むことができます。

http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/flvrecord/listener/async/BaseStreamWriter.java?view=markup _

クラスには、パケットを収集するための Queue も含まれています。

IStreamPacket.getType == 9 はビデオで、8 はオーディオだと思います (ただし、確認する必要があります)。

セバスチャン

于 2012-10-15T18:00:16.740 に答える
0

現在はどのような録音方法を使用していますか? Red5 には実際に記録する 2 つの方法があります: 1) NetStream.record => これは単純です 2) NetStream を「ライブ」で実行しますが、ストリームにアタッチしてストリームをディスクに書き込むサーバー側の StreamListener があります。

http://incubator.apache.org/openmeetings/で両方のソリューションを正常に実装しました。 ビデオが途切れたり、ランダムに停止/一時停止したりすることはありません。

Red5 で簡単なレコーディングを行うために、FFMPEG や Xuggler を統合する必要はありません。FFMPEG は、結果のビデオを変更して透かしを追加する場合に役立ちます。オーディオ編集には、SoX などのツールを使用できます。しかし...ただの録音とそのままの再生には、これらのツールはまったく必要ありません!

セバスチャン

于 2012-10-12T07:24:42.133 に答える