Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.03.2015, 02:20
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Размер пакета
И так у есть nodejs сервер, стримит видео и мобильное устройство. У меня долго бомбило и я не мог понять почему не работает ( если я правильно понял Content-Length задает размер пакета который будет отослан киленту в байтах ?), после чего я уменьшил размер пакета на 1000 и о чудо все заработало (сделал это криво, но не суть ).
Что это за черная магия, причем проблема воспроизводится не на всех устройствах. Точнее она воспроизводится почти на всех телефонах кроме nexus 5? WTF?

var express = require('express');
var path = require( "path" );
var app = express();
var mime = require ( "mime" );
var fs = require( "fs-extra" );
var videoFolder = "video/";


var port = process.env.PORT  || 5000;

app.use(express.static(     __dirname + '/public') );

app.get( "/", function ( req, res ) {

res.sendFile (  path.join ( __dirname , "index.html" ) );
} );


app.get ( "/video/:vname", returnVideo );
app.post ( "/video/:vname", returnVideo );

function returnVideo ( req, res ) {


    if ( !req.params.vname ) {
        return res.status( 404 ).end( "Not found"  );
    }

    var videoPath = path.join ( __dirname, videoFolder, req.params.vname );

    if ( !fs.existsSync ( videoPath ) ) {
        return res.status( 404 ).end( "Not found"  );
    }

    var stat = fs.statSync( videoPath  );
    var total = stat.size;

    if (req.headers.range) {   
        var range = req.headers.range;
        var parts = range.replace(/bytes=/, "").split("-");
        var partialstart = parts[0];
        var partialend = parts[1];

        var start = parseInt(partialstart, 10);
        var end = partialend ? parseInt(partialend, 10) : total-1;
        //var chunksize =   (end-start)+1;
        var chunksize =  Math.round( ((end-start)+1 ) / 1000 ) ;// уменьшил пакет в 1000 раз
        console.log('RANGE: ' + start + ' - ' + end + ' = ' + chunksize);

        var file = fs.createReadStream( videoPath , {start: start, end: end});
        res.writeHead(206, { 'Content-Range': 'bytes ' + start + '-' + end + '/' + total, 'Accept-Ranges': 'bytes', 'Content-Length': chunksize, 'Content-Type': mime.lookup( videoPath ) });
        file.pipe(res);

    } else {

        console.log('ALL: ' + total);
        res.writeHead(200, { 'Content-Length': total, 'Content-Type': 'video/mp4' });
        fs.createReadStream( videoPath ).pipe(res);
    }



}


app.listen ( port );
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #2 (permalink)  
Старый 20.03.2015, 15:06
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Кто сталивался с чем то подобным?
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Окно под размер картинки. DelJf Javascript под браузер 3 27.05.2012 21:27
Как узнать размер загружаемого файла? shkarbatov Серверные языки и технологии 5 14.08.2011 17:12
Изменить размер изображений odlf3 jQuery 1 03.06.2011 07:06
Размер шрифта в input Indiana Элементы интерфейса 5 16.02.2010 19:52
Как изменить размер картинки? Mihail Общие вопросы Javascript 1 25.10.2009 13:42