Как отправить .mp4 или .webm записанное видео с веб-сайта в бэкэнд s3 bucket - PullRequest
0 голосов
/ 02 апреля 2019

Я создаю веб-сайт для записи видео с помощью веб-камеры. Я могу успешно загружать видео на свой локальный компьютер. Но я хочу передать данные бэкэнду и сохранить минимальную корзину 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. Благодарю.

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