0

JavaライブラリRestletを介してファイルをストリーミングしようとしています。ただし、ファイルはストリーミング中に書き込まれます。これがどのように機能するかです。

ビデオとオーディオ ファイルを作成してから、2 つのファイルを 1 つに結合します。この手順にはかなりの時間がかかります。したがって、新しいファイルの作成中に、10分待たずにビデオを見ることができるブラウザにファイルをストリーミングしたいと考えています。

現時点では、FileInputStream を使用してファイル チャンクを読み取ることができますが、ファイルをブラウザーに提供する方法がわかりません。何か案は?

Restlet で動的ファイルを提供することは可能ですか?

よろしくお願いします。下手な英語で申し訳ありません^^

ジムティス

[アップデート]

Jerome Louvel のおかげで、作成中に mp3 ファイルを再生できました。

public class RestletStreamTest extends ServerResource {

    private InputRepresentation inputRepresentation;
    public FileInputStream fis;

    @Get
    public InputRepresentation readFile() throws IOException {
        final File f = new File("/path/to/tile.mp3");
        fis = new FileInputStream(f);

        inputRepresentation = new InputRepresentation(new InputStream() {
            private boolean waited = false;

            @Override
            public int read() throws IOException {
                waited = false;

                // read the next byte of the FileInputStream, when reaching the    
                // end of the file, wait for 2 seconds and try again, in case
                // the file was not completely created yet
                while (true) {
                    byte[] b = new byte[1];

                    if (fis.read(b, 0, 1) > 0) {
                        return b[0] + 256;
                    } else {
                        if (waited) {
                            return -1;
                        } else {
                            try {
                                Thread.sleep(2000);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                            waited = true;
                        }
                    }
                }
            }

        }, MediaType.AUDIO_MPEG);

        return inputRepresentation;
    }
}

少し鈍いですが、機能し、後で洗練されます。コードを変更してビデオのストリーミングを試みると、プレーヤーはビデオのすべてのバイトを読み取り、再生を開始してすべてのバイトを再度読み取ります。動画が終わって再生ボタンを押しても何も起こりません。Restlet がタイムアウトをスローした後、ビデオの再生が再開されます。.mp4 と .flv ファイルを試してみましたが、常に同じ結果になりました。

Restlet の問題なのか、プレイヤーの問題なのかわかりません。Firefox で VLC プレーヤーを使用し、Chrome で標準の html5 プレーヤーを試しました。しかし、Chrome プレーヤーは再生すら開始しませんでした。

私は何かを逃しましたか?それともプレイヤーだけの問題ですか?

4

2 に答える 2

1

FileInputStream をラップする InputRepresentation インスタンスを返すか、新しく作成されたファイルをラップする FileRepresentation を直接返すことをお勧めします。

于 2013-10-01T01:13:27.593 に答える
0

おそらく、1 分の小さなファイルを作成し、エンコードが完了するまで順番に再生するとうまくいくでしょう。

于 2013-10-06T05:22:29.173 に答える