2016-04-19 11 views
0

iosデバイスにストリームするmp4ビデオファイルを作成しようとしています。私はIISサーバーを使用してドメインからhttps接続を取得し、ローカルホスト上のexpress(nodejs)サーバーにリバースプロキシを使用しています。これは私のノードのjsです:ノードjsからIOSへの部分コンテンツビデオストリーム

var range = req.headers.range; 
    var contentType = _mime2.default.lookup(filename); 

    if (req.get('Range') == null){ 
     console.log("hei"); 
     res.status(200); 
     res.set('Connection', 'keep-alive'); 
     res.set('Content-Type',contentType); 
     res.set('Content-Length', data.length); 
     res.set("Accept-Ranges", "bytes"); 
     res.end(data) 
    }else{ 
     var total = data.length; 
     var split = range.split(/[-=]/); 
     var ini = +split[1]; 
     var end = split[2]?+split[2]:total-1; 
     var chunkSize = end - ini + 1; 
    if (parseInt(ini) >= total || parseInt(end) >= total) { 
     //Indicate the acceptable range. 
     res.status(416); 
     res.set("Content-Range",'bytes */' + total); // File size. 
     //Return the 416 'Requested Range Not Satisfiable'. 
     res.end(); 
    } 
     res.status(206); 
     res.set('Connection', 'keep-alive'); 
     res.set("Content-Range","bytes " + ini + "-" + end + "/" + total); 
     res.set("Accept-Ranges", "bytes"); 
     res.set("Content-Length", chunkSize); 
     res.set("Content-Type", contentType); 
     res.end(data.slice(ini, chunkSize+ini)); 
    } 
    }).catch(function (err) { 
    res.status(404); 
    res.set('Content-Type', 'text/plain'); 
    res.end('File not found.'); 
    }); 

異なるブラウザの[1]

挙動[![Firefoxの] [1]でCatched]:

  • Chromeは
  • 全体のビデオをダウンロードしますFirefoxはビデオを細かく再生する
  • OSX safariはビデオ全体をダウンロードします
  • IOS safariは再生/ストリームを開始しませんg

IOS safariがこれを気に入らない理由を知っている人は誰ですか?

(ビデオ:フォーマット:264、568x320、AAC、22050ヘルツ、784.65キロビット/秒、.MP4)

+0

あなたはサーバーにデータを送信する方法をiOSコードと共有できますか? – souvickcse

答えて

1

応答Content-Typeが正しくありません。 video/mp4である必要があります。あなたは、メモリ内のファイル全体のバッファを持っている必要はありません

res.status(206); 
res.set('Connection', 'keep-alive'); 
res.set("Content-Range","bytes " + ini + "-" + end + "/" + total); 
res.set("Accept-Ranges", "bytes"); 
res.set("Content-Length", chunkSize); 
res.set("Content-Type", contentType); 
fs.createReadStream(filename, { start: ini, end: end }).pipe(res) 

:あなたのdata変数がどこから来ている。また、それは明確ではないのですが、あなたはおそらく、代わりにこのようなことをやるべき。それとは別に、同じリクエストで複数のバイト範囲を処理する必要があるかもしれません。要求Rangeヘッダーの値が0-9,50-499,1000-の場合そのような場合は、multipart/byterangesという応答で応答する必要があります。

+0

読んでくれてありがとう、正しい方向に向いてくれてありがとう!まだ解は見つかりませんでしたが、mongodbがあり、データはグリッドファイルです(私は思っています)。私はこれに慣れていないので、もう少し周りを検索しなければならない、私はより多くの情報で戻ってくるだろう。 – Stav1

+0

[weightingformypizzaからのleroib](https://weightingformypizza.wordpress.com/2015/06/24/stream-html5-media-content-like-video-audio-from-mongodb-using-express-and-gridstore/)私のための解決策でした。 [作品はCreative Commons Attribution 4.0 International Licenseの下でライセンスされています。](http://creativecommons.org/licenses/by/4.0/)。右の方向に私を指してくれてありがとうございました。 (これはhttpsでは動作しませんでしたが、httpではTLS 1.2プロトコルのIISサーバの問題です) – Stav1

関連する問題