Javascript.RU

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

Синхронизация 2х видео
function syncMedia(){};

syncMedia.prototype.syncMedia = function ( mediaMain, media ) {

    var self = this;

    if ( mediaMain.getAttribute( "data-syncing" ) ||
        media.getAttribute( "data-syncing" ) ) {
        return;
    }

    function sync() {

        if ( !mediaMain.getAttribute( "data-syncing" ) ||
            !media.getAttribute( "data-syncing" ) )
            return;

        if ( isNotSynced() ) {

            media.currentTime = mediaMain.currentTime;

            if ( !isReady( media ) || !isReady( mediaMain ) ) {

                media.pause();
                mediaMain.pause();

                media.addEventListener( "seeked", function f() {
                    media.removeEventListener( "seeked", f );
                    self._seekedHandler = f;

                    wait( mediaMain, media, mediaMain.currentTime, function () {
                        if ( !self._notPlay && !isNotSynced() ) {
                            media.play();
                            mediaMain.play();
                        }

                        sync();
                    });

                } );

            }

            return;
        }

    };

    function isNotSynced () {
        return mediaMain.currentTime - media.currentTime > 0.2 ||
            mediaMain.currentTime - media.currentTime < -0.2;
    }

    mediaMain.setAttribute( "data-syncing", true );
    media.setAttribute( "data-syncing", true );

    media.addEventListener( "timeupdate", sync );
    mediaMain.addEventListener( "timeupdate", sync );

    //sync();

    function wait( media, sMedia, time, callback ) {
        var _callback = function () {
            //console.log( "1", getBuffered( media, time ) );
            //console.log( "2", getBuffered( sMedia, time ) );

            if( isReady( media ) && isReady( sMedia )
                && getBuffered( media, time ) > 0.2
                &&  getBuffered( sMedia, time ) > 0.2 ) {

                callback();
                media.removeEventListener( "progress", _callback );
                sMedia.removeEventListener( "progress", _callback);
            }
        };

        self._progressHandler = _callback;

        media.addEventListener( "progress", _callback );
        sMedia.addEventListener( "progress", _callback );

        _callback();
    };

    function isReady( media ) {
        return media.readyState === media.HAVE_ENOUGH_DATA;
    };

    this._sync = sync;
    this._notPlay = false
};

syncMedia.prototype.unSyncMedia = function ( media, sMedia ) {

    sMedia.removeAttribute( "data-syncing" );
    media.removeAttribute( "data-syncing" );

    media.removeEventListener( "timeupdate", this._sync );
    sMedia.removeEventListener( "timeupdate", this._sync );
    media.removeEventListener( "progress", this._progressHandler );
    sMedia.removeEventListener( "progress", this._progressHandler );
    media.removeEventListener( "seeked", this._seekedHandler );
    sMedia.removeEventListener( "seeked", this._seekedHandler );
};


function getBuffered ( video, currentTime ) {

    var buffered = video.buffered, end;

    for ( var i = 0; i < buffered.length; i++ ) {
        end = buffered.end ( i );

        if ( Math.floor ( buffered.start( i ) ) <= currentTime &&
            end > currentTime ) {

            if ( end >= video.duration ) {
                return end;
            }

            return end - currentTime;
        }
    }

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



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как встроить видео в popup окно? MrFull23 jQuery 1 14.11.2014 10:49
Сайт торент видео онлайн (через браузер). nemo84 Ваши сайты и скрипты 1 18.05.2013 21:07
Как вставить видео на страничку .json MastaMustBe Элементы интерфейса 2 17.09.2012 16:51