Я создаю веб-сайт для записи видео с помощью веб-камеры. Я могу успешно загружать видео на свой локальный компьютер. Но я хочу передать данные бэкэнду и сохранить минимальную корзину AWS S3. Я попытался отправить записанный шарик на сервер и сохранить его в файл .mp4 или .webm. Но я не могу играть в них после загрузки из корзины s3. Я также попытался открыть файл mp4 с помощью шестнадцатеричного редактора uisng, скопировать содержимое, вставить пустой файл и назвать его test.mp4. Затем я обнаружил, что размер нового файла другой, и я не могу воспроизвести его на плеере. Мне интересно, как правильно передавать потоковое видео. Спасибо.
Мой код для загрузки видео локально и отправки на сервер с использованием API-шлюза.
// download video locally
async function downloadVideo(entryTime, name) {
//console.log('recordedBlobs: ', recordedBlobs);
//console.log('last 100 recordedBlobs: ', recordedBlobs.slice(Math.max(recordedBlobs.length-100, 1)));
const blob = new Blob(recordedBlobs, {type: 'video/mp4'});
// send blob to backend
var fd = new FormData();
fd.append('fname', `${entryTime}${name}.webm`);
fd.append('data', blob);
$.ajax({
type: 'POST',
url: _config.api.invokeUrl + '/video',
headers: {
Authorization: authToken
},
data: fd,
processData: false,
contentType: false,
error: function(XMLHttpRequest, textStatus, errorThrown) {
console.error('Error requesting ride: ', textStatus, ', Details: ', errorThrown);
console.error('Response: ', jqXHR.responseText);
}
}).done(function(data) {
});
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.style.display = 'none';
a.href = url;
a.download = `${entryTime}${name}.mp4`;
//console.log('entryTime: ', entryTime);
document.body.appendChild(a);
a.click();
setTimeout(() => {
document.body.removeChild(a);
window.URL.revokeObjectURL(url);
}, 100);
}
Ниже приведена моя лямбда-функция для сохранения файла в корзину s3.
def lambda_handler(event, context):
# TODO implement
s3Bucket = os.environ['s3Bukect']
print(event);
message = event['body']
#print ("check message: ", type(message))
data = message.splitlines()[8:-1]
video = ''.join(data)
#print('message: ', message)
print(video)
res = True
# put itme to s3 bucket
s3 = boto3.resource('s3')
content = video
s3.Object(s3Bucket, 'test.mp4').put(Body=content)
print ("finished")
return {
"statusCode": 201,
"body": res,
"headers": {
'Access-Control-Allow-Origin': '*'
}
}
Напечатанное сообщение - это странные знаки, подобные приведенным ниже:
E ߣ BBBBBwebmB
Как я могу декодировать данные и сохранять их в формате, который я могу воспроизвести, например, в проигрывателе VLC. Благодарю.