HTTP заголовок для продолжительности MP4 для HTML 5 видео
Я пытаюсь потоковое видео MP4, как он закодирован с веб-сервера. Я считаю, что использовал соответствующие флаги, но он работает неправильно. Когда я загружаю видео из своего потока и открываю его с помощью VLC, он правильно показывает продолжительность. Поскольку сокет не доступен для поиска, я предполагаю, что он записывает метаданные до конца? Мой браузер Chrome всегда показывает продолжительность 8 секунд. Первые 8 секунд воспроизводятся с нормальной скоростью, но затем кнопка паузы превращается в кнопку воспроизведения, и видео воспроизводится очень быстро, возможно, так же быстро, как и получено. Однако звук воспроизводится с нормальной скоростью. Я пытался!--2--> но это поле только для чтения.
интересно, есть ли в любом случае явно указать продолжительность в заголовках HTTP или каким-либо другим способом? Я не могу найти никаких документов об этом.
ffmpeg -i - -vcodec libx264 -acodec libvo_aacenc -ar 44100 -ac 2 -ab 128000 -f mp4 -movflags frag_keyframe+faststart pipe:1 -fflags +genpts -re -profile baseline -level 30 -preset fast
чтобы закрыть избирателей, которые думают, что это не связано с программированием, я использую его на своем собственном сервере, который я закодировал, и мне нужно установить продолжительность программно через JavaScript или настройку заголовок http. Я считаю, что это может быть связано с заголовками ffmpeg или http, поэтому я разместил его здесь.
app.get("/video/*", function(req,res){
res.writeHead(200, {
'Content-Type': 'video/mp4',
});
var dir = req.url.split("/").splice(2).join("/");
var buf = new Buffer(dir, 'base64');
var src = buf.toString();
var Transcoder = require('stream-transcoder');
var stream = fs.createReadStream(src);
// I added my own flags to this module, they are at below:
new Transcoder(stream)
.videoCodec('libx264')
.audioCodec("libvo_aacenc")
.sampleRate(44100)
.channels(2)
.audioBitrate(128 * 1000)
.format('mp4')
.on('finish', function() {
console.log("finished");
})
.stream().pipe(res);
});
функция exec в этом модуле stream-transcoder,
a.push("-fflags");
a.push("+genpts");
a.push("-re");
a.push("-profile");
a.push("baseline");
a.push("-level");
a.push("30");
a.push("-preset");
a.push("fast");
a.push("-strict");
a.push("experimental");
a.push("-frag_duration");
a.push("" + 2 * (1000 * 1000));
var child = spawn('ffmpeg', a, {
cwd: os.tmpdir()
});
1 ответов
Я считаю Это то, что вам нужно.
документация Mozilla на X-Content-Duration
*
* в документации обсуждается формат OGG, но принцип применим и к другим видеоформатам