Tengo una extensión de Google Chrome que registra la pestaña actual y, al detener la grabación, sube el video a Google Drive con éxito en una carpeta específica.
Estoy buscando cómo subir el video mientras la grabación aún está en progreso. Lo que significa que los blobs que obtengo de la grabación se cargan en el. Google Drive.
var superBuffer = new Blob(recordedBlobs, { type: 'video/mp4', }); var metadata = { name: Date.now() + '.mp4', mimeType: 'video/mp4', parents: [folderId], }; var form = new FormData(); form.append('metadata', new Blob([JSON.stringify(metadata)], { type: 'application/json' })); form.append('file', superBuffer); var xhrDriveRequest = new XMLHttpRequest(); xhrDriveRequest.open('POST', 'https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart&fields=id'); xhrDriveRequest.setRequestHeader('Authorization', 'Bearer ' + accessToken); xhrDriveRequest.responseType = 'json'; xhrDriveRequest.send(form);Implementé algo similar para la grabación de cámaras web usando RecordRTC . La biblioteca proporciona un timeSlice entero de fracción de tiempo en milisegundos y una devolución de llamada de ondataavailable( blob ) que se llamará después de cada período de timeSlice tiempo. A continuación, puede simplemente publicar el blob recibido en el servidor y volver a unir los blobs en un solo archivo.
Por ejemplo, en PHP, simplemente agregaría o escribiría los datos de blob en el archivo:
$filePath = '/path-to-file'; // path for each recording process created from an id or something unique if (isset($_FILES["blob"])) { // If the path already exists we are receiving further blobs => append, else write new file $fp = fopen($filePath, file_exists($filePath) ? "a" : "w"); fwrite($fp, file_get_contents($_FILES["blob"]["tmp_name"])); fclose($fp); }La API de Google Drive puede realizar una carga reanudable . Le permitirá seguir cargando mientras se graba su pantalla.
Como resumen de cómo funcionan las cargas reanudables:
POST con el parámetro uploadType=resumable y obtenga el URI de sesión reanudable dentro del encabezado Ubicación. Recuerde que como no conoce la longitud del archivo, no debe configurar X-Upload-Content-Length .PUT a ese URI con Content-Length establecido en la cantidad de bytes en el archivo.Content-Range en */* si no conoce el tamaño total del archivo y el espacio del nuevo fragmento.