2

NodeJS + Express で API を作成しました。これは、/videos/stream/{id}ルートを呼び出すときにビデオ ストリームを送信することになっています。コードは次のとおりです。

    router.get('/stream/:id', function(req, res) {

      fs.readFile(app.get('path') + '/videos/' + req.params.id + '/video.mp4', function (err,data) {
        if (err) { ... }
        res.writeHead(200, {
            'Content-type' : 'application/octet-stream',
            'Content-Length' : data.length
        });
        res.end(data);
    });
});

URI全体をブラウザに入力すると、VLCでストリームを開くか保存できるため、このコードは機能しています。

問題は、Videogular フレームワークでビデオ ストリームを表示できないことです。次のように、「開始方法」コードをコピーして AngularJS アプリに貼り付けると、次のようになります。

sources: [
    {src: $sce.trustAsResourceUrl("http://static.videogular.com/assets/videos/videogular.mp4"), type: "video/mp4"},
    {src: $sce.trustAsResourceUrl("http://static.videogular.com/assets/videos/videogular.webm"), type: "video/webm"},
    {src: $sce.trustAsResourceUrl("http://static.videogular.com/assets/videos/videogular.ogg"), type: "video/ogg"}
],

これは機能し、プレーヤーでビデオを見ることができますが、URI を API の URI に置き換えると、次のようになります。

sources: [
    {src: $sce.trustAsResourceUrl("http://localhost:3000/api/videos/stream/556747d8f657a9b81c7f3543"), type: "application/octet-stream"}
],

プレーヤーは黒いままで、ビデオが再生されません。理由はわかりません。

4

1 に答える 1

1

解決策を見つけましたが、これは私の API の動作に非常に固有のものです。動画を API にアップロードすると、自動的に MP4 に変換されます。

だからこれは私の設定です:

    $scope.config = {
      sources: [
        {src: $sce.trustAsResourceUrl("http://localhost:3000/api/videos/stream/" + data.video._id), type: "video/mp4"}
      ],
      tracks: [{ ... }],
      theme: "bower_components/videogular-themes-default/videogular.css",
      plugins: {
        poster: "http://www.videogular.com/assets/images/videogular.png"
      }
    };

私のAPIはすべてをMP4に変換するため、type : "video/mp4"代わりに注意してください。type : "application/octet-stream"

アップロードされたビデオが MP4 の場合、このコードは完全に機能します。そうしないと、非 MP4 ビデオがアップロードされ、API で変換されたときに、Videogular のプレーヤーにストリーミングできません。

TL;DR

私の API はビデオを適切に変換していません。これが、Videogular が一部をストリーミングできない理由です。

于 2015-06-03T14:14:39.260 に答える