js 비디오 및 오디 오 수집

6677 단어 js비디오오디 오
오늘 쓸 것 은 모두 가 평소에 사용 하 는 것 이 아니다.호환성 이 정말 안 되 기 때문에,단지 전단 이 원래 이런 일 을 할 수 있 었 다 는 것 을 설명 하기 위해 서 이다.
카메라 와 마이크 의 동 영상 흐름 과 오디 오 흐름 을 추출 해 내 고 싶 은 대로 할 수 있다 고 상상 할 수 있 을 까?아니면 제 canvas 패 널 의 내용 을 동 영상 으로 녹화 하고 싶 습 니 다.js 가 할 수 없 을 것 같은 일 들 은 모두 할 수 있 지만 호환성 이 좋 지 않 습 니 다.나 는 여기 서 모두 chrome 브 라 우 저 로 예 를 들 었 다.
여기에 사용 할 api 를 먼저 열거 합 니 다.
  • getUserMedia:카메라 와 마이크 의 인터페이스(문서 링크)를 엽 니 다
  • 미디어 레 코더:채집 음 영상 흐름(문서 링크)
  • srcObject:video 라벨 은 동 영상 흐름 을 직접 재생 할 수 있 습 니 다.이것 은 여러분 이 사용 하지 않 을 것 입 니 다.호환성 이 좋 은 속성 입 니 다.여러분 이 알 아 보 는 것 을 추천 합 니 다(문서 링크)
  • capture Stream:canvas 를 출력 할 수 있 습 니 다.사실은 canvas 뿐만 아니 라 이 기능 만 들 었 습 니 다.구체 적 으로 문서(문서 링크)를 볼 수 있 습 니 다
  • 1.카메라 로 영상 보 여주 기
    1.카메라 켜 기
    
    //              (     Promise  )
    navigator.mediaDevices.getUserMedia({
     audio: true,
     video: true
    }).then(stream => {
     console.log(stream) //       
    }).catch(err => {
     console.log(err) //     
    })
    위 에서 우 리 는 카메라 와 마 이 크 를 성공 적 으로 켜 고 동 영상 흐름 을 얻 었 다.다음은 인 터 랙 션 인터페이스 에 흐름 을 보 여 주 는 것 이다.
    영상
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <meta http-equiv="X-UA-Compatible" content="ie=edge">
     <title>Document</title>
    </head>
    <body>
     <video id="video" width="500" height="500" autoplay></video>
    </body>
    <script>
     var video = document.getElementById('video')
     navigator.mediaDevices.getUserMedia({
     audio: true,
     video: true
     }).then(stream => {
     //       srcObject   ,         
     video.srcObject = stream
     }).catch(err => {
     console.log(err) //     
     })
    </script>
    효 과 는 다음 그림 과 같 습 니 다:

    지금까지 우 리 는 우리 의 카 메 라 를 페이지 에 성공 적 으로 보 여 주 었 다.다음 단 계 는 동 영상 을 수집 하고 동 영상 파일 을 다운로드 하 는 방법 이다.
    2.카메라 에서 영상 채집
    미디어 레 코더 대상 을 사용 합 니 다:
    새 MediaRecorder 대상 을 만 들 고 MediaStream 대상 을 되 돌려 녹화 작업 을 합 니 다.설정 항목 설정 용기 의 MIME type(예 를 들 어"video/webm"또는"video/mp4")또는 오디 오 인 코딩 비디오 인 코딩 을 지원 합 니 다.
    MediaRecorder 는 두 개의 매개 변 수 를 수신 합 니 다.첫 번 째 는 stream 음 영상 흐름 이 고 두 번 째 는 option 설정 매개 변수 입 니 다.다음은 위 에 있 는 카메라 에서 얻 은 흐름 을 미디어 레 코더 에 넣 을 수 있 습 니 다.
    
    var video = document.getElementById('video')
    navigator.mediaDevices.getUserMedia({
     audio: true,
     video: true
    }).then(stream => {
     //       srcObject   ,         
     video.srcObject = stream
     var mediaRecorder = new MediaRecorder(stream, {
     audioBitsPerSecond : 128000, //     
     videoBitsPerSecond : 100000, //     
     mimeType : 'video/webm;codecs=h264' //     
     })
    }).catch(err => {
     console.log(err) //     
    })
    위 에서 미디어 레 코더 의 인 스 턴 스 미디어 레 코더 를 만 들 었 습 니 다.다음은 미디어 레 코더 의 채집 시작 과 채집 중단 을 통제 하 는 방법 입 니 다.
    MediaRecorder 는 다음 과 같은 방법 과 이 벤트 를 제공 합 니 다.
    미디어 Recorder.start():미디어 녹 화 를 시작 합 니 다.이 방법 을 호출 할 때 timeslice 매개 변수 에 밀리초 값 을 설정 할 수 있 습 니 다.이 밀리초 값 을 설정 하면 녹 화 된 미디어 는 설정 한 값 에 따라 하나의 단독 블록 으로 나 눌 수 있 습 니 다.기본 적 인 방식 으로 매우 큰 전체 내용 을 녹음 하 는 것 이 아 닙 니 다
  • MediaRecorder.stop():녹 화 를 중단 합 니 다.동시에 dataavailable 이 벤트 를 촉발 하여 Blob 내용 을 저장 하 는 녹화 데 이 터 를 되 돌려 줍 니 다.그 후에 기록 하지 않 습 니 다
  • ondataavailable 이벤트:MediaRecorder.stop 에서 이 이 벤트 를 촉발 합 니 다.이 이 벤트 는 기 록 된 미디어 를 가 져 오 는 데 사 용 됩 니 다(Blob 는 이벤트 의 data 속성 에서 대상 으로 사용 할 수 있 습 니 다)
  • 
    //                     
    var start = document.getElementById('start')
    var stop = document.getElementById('stop')
    var video = document.getElementById('video')
    navigator.mediaDevices.getUserMedia({
     audio: true,
     video: true
    }).then(stream => {
     //       srcObject   ,         
     video.srcObject = stream
     var mediaRecorder = new MediaRecorder(stream, {
     audioBitsPerSecond : 128000, //     
     videoBitsPerSecond : 100000, //     
     mimeType : 'video/webm;codecs=h264' //     
     })
     //     
     start.onclick = function () {
     mediaRecorder.start()
     console.log('    ')
     }
     //     
     stop.onclick = function () {
     mediaRecorder.stop()
     console.log('    ')
     }
     //   
     mediaRecorder.ondataavailable = function (e) {
     console.log(e)
     //     
     var blob = new Blob([e.data], { 'type' : 'video/mp4' })
     let a = document.createElement('a')
     a.href = URL.createObjectURL(blob)
     a.download = `test.mp4`
     a.click()
     }
    }).catch(err => {
     console.log(err) //     
    })
    ok,현재 1 라운드 작업 을 수행 합 니 다.

    위의 그림 은 채집 이 끝 난 후 ondataavailable 이벤트 가 되 돌아 오 는 데이터 중 Blob 대상 이 있 습 니 다.이것 이 바로 비디오 자원 입 니 다.그 다음 에 우 리 는 URL.createObject URL()방법 을 통 해 Blob 를 url 로 다운로드 할 수 있 습 니 다.동 영상 수집 은 다운로드 가 끝나 면 간단 하고 난폭 하 다.
    위 는 영상 채집 다운로드 의 예 로 오디 오 채집 만 하면 같은 이치 로'mime Type'을 설정 하면 된다.여 기 는 예 를 들 지 않 겠 습 니 다.다음은 canvas 를 비디오 파일 로 녹화 하 는 것 을 소개 하 겠 습 니 다.
    2.canvas 출력 영상 흐름
    capture Stream 방법 을 사용 하여 canvas 출력 흐름 을 video 로 보 여 주거 나 MediaRecorder 로 자원 을 수집 하 는 것 도 가능 합 니 다.
    
    //                               。
    <!DOCTYPE html>
    <html lang="en">
    <head>
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <meta http-equiv="X-UA-Compatible" content="ie=edge">
     <title>Document</title>
    </head>
    <body>
     <canvas width="500" height="500" id="canvas"></canvas>
     <video id="video" width="500" height="500" autoplay></video>
    </body>
    <script>
     var video = document.getElementById('video')
     var canvas = document.getElementById('canvas')
     var stream = $canvas.captureStream(); //     canvas   
     //              ,            。
    </script>
    다음은 gif 를 하나 더 붙 여 보 겠 습 니 다.
    아래 의 효 과 를 실현 하 시 기 를 바 랍 니 다.사실은 canvas 영상 에 배경 음악 을 삽입 할 수 있 습 니 다.이런 것들 은 비교적 간단 합 니 다.

    좋은 웹페이지 즐겨찾기