Sto utilizzando l'API MediaRecorder insieme al metodo Canvas captureStream per codificare un flusso video VP8 di una tela nel browser. Questi dati vengono inviati a FFmpeg tramite socket web binario.MediaRecorder modifica le dimensioni senza provocazione
var outputCaptureStream = $('canvas')[0].captureStream(30);
var mediaRecoder = new MediaRecoder(outputCaptureStream, {
mimeType: 'video/webm'
});
mediaRecorder.ondataavailable = function (e) {
ffmpegStdin.write(e.data);
}
mediaRecoder.start(1000);
Per qualche motivo, il flusso sembra passare in modo casuale a un mid-stream di risoluzione inferiore. FFmpeg non è felice di questo:
Il flusso di input # 0: 0 cornice modificata da dimensioni: 1280x720 fmt: YUV420P alla dimensione: 1024x576 fmt: YUV420P
[VP8 @ 0x2a02c00] upscaling non è implementata. Aggiorna la tua versione di FFmpeg alla più recente da Git. Se il problema si verifica ancora, significa che il tuo file ha una funzionalità che non è stata implementata. [vp8 @ 0x2a02c00] Se si desidera aiutare, caricare un esempio di questo file su ftp://upload.ffmpeg.org/incoming/ e contattare la mailing list ffmpeg-devel. ([email protected])
Sospetto che abbia qualcosa a che fare con un uso eccessivo della CPU e che Firefox stia cercando di essere utile ridimensionando il video. Le mie domande:
- Firefox ridimensiona il video al volo?
- In tal caso, quali condizioni causano ciò? (Carico della CPU? Backoffure dello streaming?)
- È possibile impedire a Firefox di farlo?
- C'è una spiegazione diversa per questo comportamento che mi manca?
è la dimensione della tela fissa? stai trasmettendo in streaming la tua videocamera? – mido
@mido La dimensione della tela è completamente fissa. Sto disegnando frame su richiestaAnimationFrame, con un limite di 30 FPS tramite "l'approccio migliore" qui: http://codetheory.in/controlling-the-frame-rate-with-requestanimationframe/ – Brad
puoi condividere il codice, potrei dare prova e vediamo se riesco a individuare il problema .. – mido