html5 видео не воспроизводится на некоторых хостах - PullRequest
0 голосов
/ 30 марта 2011

Прекрасно работает с моего http://127.0.0.1 http-сервера и, если "not", указание типа mimi в тегах источника работает один раз при загрузке на хост vistapanel.net.Для моментального снимка соответствующего кода.

<video id="vid" width="64" height="48" style="display:none">
      <source src="images/queryzoom.webmvp8.webm" />
      <source src="images/queryzoom.theora.ogv" />
</video>
<video id="vid2" width="64" height="48" style="display:none">
      <source src="images/save.webmvp8.webm" />
      <source src="images/save.theora.ogv" />
</video>
<canvas id="processCanvas" width="640" height="480" style="width:1px;height:1px" style="display:none">
</canvas>

...

function newFrame() {
    frame++;    
    if (frame > 1000) {
        frame = 0;
        svideo.currentTime = 0;
        jvideo.currentTime = 0;
    }

...

if (frame == 200) {
    jvideo.play();
}

...

if (frame > 200 && frame < 320) {
    process.drawImage(jvideo, 0,0,640,480);
    var TheImage = process.getImageData(0, 0, 640, 480);
    var jpgdata = TheImage.data;
    for (var i = 0, n = jpgdata.length; i < n; i += 4) {
    if (jpgdata[i] < 80 && jpgdata[i+1] < 80 && jpgdata[i+2] > 128) {
        jpgdata[i+3] = 0; 
    }
    }
    process.putImageData(TheImage, 0, 0);
    gold = document.getElementById('processCanvas');
    ctx.fillRect(width-400,0,400,200);
    fwidth=300;
    ctx.drawImage(gold, width-180-(fwidth/2),0,fwidth,200);
}

...

if (frame == 810) {
    svideo.play();

}

...

if (frame > 800 && frame <1000) {
    process.drawImage(svideo, 0,0,640,480);
    if (frame <840) {
        ctx.fillRect(width-400,0,(frame-800)*10,200);
        var TheImage = process.getImageData(0, 0, 640, 480);
        var jpgdata = TheImage.data;
        for (var i = 0, n = jpgdata.length; i < n; i += 4) {
        if (jpgdata[i] < 80 && jpgdata[i+1] < 80 && jpgdata[i+2] > 128) {
            jpgdata[i+3] = 0; 
        }
        }
        process.putImageData(TheImage, 0, 0);
        gold = document.getElementById('processCanvas');
        progress = (frame-800)/40;
        ctx.drawImage(gold, 0, 0, (640 * progress), 480, (width - 360), 0, (150 * progress), 100);                      
    } else {
        var TheImage = process.getImageData(0, 0, 640, 480);
        var jpgdata = TheImage.data;
        for (var i = 0, n = jpgdata.length; i < n; i += 4) {
        if (jpgdata[i] < 80 && jpgdata[i+1] < 80 && jpgdata[i+2] > 128) {
            jpgdata[i+3] = 0; 
        }
        }
        process.putImageData(TheImage, 0, 0);
        gold = document.getElementById('processCanvas');
        ctx.fillRect(width-400,0,400,200);
        fwidth=300;
        ctx.drawImage(gold, width-360,0,fwidth/2,100);
    }
}

...

}

...

var frame=0;

var jvideo = document.getElementById("vid");
var svideo = document.getElementById("vid2");


var canvas = document.getElementById('processCanvas');
var process = canvas.getContext('2d');

newFrame();

Воспроизведение в первый раз, но не во втором проходе.Я думаю, что проблема с необходимостью перезагрузки и отсутствием поддержки на хосте для чтения файла по диапазону.Таким образом, мы будем менять src в теге video вместо попытки воспроизведения, устанавливая значение currentTime в ноль. Обратите внимание, что для currentTime не установлено воспроизведение видео (), также не запускается в начале.

Надеясь на кого-тоуже решал эту проблему?

Бета-версия http://sdfreelance.vistapanel.net/beta.html

Ответы [ 2 ]

1 голос
/ 31 марта 2011

В учебнике для перезагрузки видео используется

if (frame > 1000) {
    frame = 0;
    svideo.load();
    jvideo.load();
}

Работает с Firefox, но не с Chrome. Следует отметить, что изменение текущего времени видео должно работать, но из-за проблем с хостом (настройка apache для видео html5 - это совсем другой вопрос) видео продолжается в режиме воспроизведения и никогда не попадает в video.ended = true; следовательно, нет информации о диапазоне и нет исключений для значения диапазона ноль.

Похоже, что Firefox использует кеш для видео, а Chrome - нет.

Не тот ответ, который я хотел, но -

  • что можно сделать, это доставить видео с помощью приложения php для создания правильного заголовка http, и цикл видео не требует перезапуска видео снова и снова.
0 голосов
/ 02 мая 2011

Работает с Firefox 4.01 на этом хосте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...