바로 Cloudinary로 웹을 위한 화면 녹화기 구축!

Google Hangouts와 다른 강력한 영상통화 네트워크 응용 프로그램이 어떻게 당신의 화면에 접근할 수 있을 뿐만 아니라 통화에서도 화면 공유를 실현할 수 있는지 생각해 본 적이 있습니까?더 이상 이상하게 굴지 마.계속 읽어 주세요.
이 강좌는 이 모든 것이 어떻게 작동하는지 깊이 있게 연구하고 화면 녹화기를 웹 응용 프로그램에 통합시키는 방법을 보여 줍니다.가장 좋은 것은 Cloudinary의 이미지와 비디오 플랫폼에 비디오 요약을 직접 보내서 Cloudinary API를 사용하여 쉽게 접근하고 실시간으로 검색할 수 있다는 것입니다.
이 강좌가 끝날 때 다음과 같은 프레젠테이션 응용 프로그램을 만들 것입니다.
참고: 이것은 GIF가 있는 위치를 보여 줍니다.



선결 조건을 실현하다.


현재 이 강좌의 일부 코드는 실험적인 기능을 필요로 하는데, 이러한 기능들은 곧 크롬 브라우저에 집적될 것이다.이러한 기능을 활성화하려면 다음과 같이 하십시오.
  • Chrome에서 chrome://flags로 이동하여 현재 Chrome 플래그를 봅니다.
  • 상단의 검색 필드에 Experimental Web Platform features 를 입력하고 Enter 키를 누릅니다.
  • Chrome은 실험 웹 플랫폼 기능 섹션의 사용 가능 아래에 있는 실험 페이지를 표시합니다.
  • 비활성화 버튼에서 아래쪽 화살표를 클릭하여 활성화 를 선택한 다음 지금 재시작 을 클릭합니다.

  • 인터페이스 구축


    웹에 화면 레코더를 만들려면 일반 HTML과 JavaScript를 사용하여 인코딩해야 합니다.먼저 다음 절차에 따라 인터페이스를 구축한다.
  • 라는 폴더를 만듭니다.유형:
  • mkdir cloudy-snap
    cd cloudy-snap
    
  • cloudy-snap 에서 index.html 파일을 만들고 코드를 프레젠테이션 응용 프로그램에 저장합니다.유형:
  • touch index.html
    
  • 다음과 같이 파일cloudy-snap을 편집합니다.
  • <!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>Cloudy Snap</title>
        <style>
            body{
              display: flex;
              flex-direction: column;
              align-items: center;
            }
            .container{
              display: flex;
              flex-direction: column;
              align-items: center;
            }
    
            #videoElement{
              width: 50%;
              padding: 30px;
            }
        </style>
    </head>
    <body>
        <img src="https://res.cloudinary.com/cloudinary/image/upload/c_scale,w_200/v1/logo/for_white_bg/cloudinary_vertical_logo_for_white_bg.png">
        <h1>CloudySnap</h1>
        <p>Take a screen recording on the web and upload it to Cloudinary</p>
        <div class="container">
          <video id="videoElement" autoplay></video>
          <button id="recorder">
            Capture screen for 2 seconds and Upload to Cloudinary
          </button>
        </div>
    </body>
    </html>
    
  • Chrome에서 파일index.html을 실행합니다.
  • 그런 다음 Chrome은 프레젠테이션 응용 프로그램의 인터페이스를 표시합니다.

    이때 인터페이스와 상호작용으로 인해 기록기가 응답하지 않습니다.다음 절에서는 레코더에 기능을 추가하고 작동하는 방법을 보여 줍니다.

    관련 기능 추가


    스크린 레코더에 기능을 추가하려면 index.html 파일에 다음 스크립트를 넣습니다.
    [...]
    
    <script>
        let recorder = document.getElementById('recorder')
    
        let videoElement = document.getElementById('videoElement')
    
        recorder.onclick = async () => {
            let mStream = await navigator.getDisplayMedia({ 'video': true })
    
            videoElement.srcObject = mStream
    
            let opts = { mimeType: 'video/webm; codecs=vp9' };
            let rec = new MediaRecorder(videoElement.srcObject, opts);
            let blobs = [];
    
            rec.ondataavailable = (e) => (e.data && e.data.size > 0) ? blobs.push(e.data) : null;
            rec.onstop = () => {
                //  get the image blob
                let finalBlob = new Blob(blobs, { type: 'video/mp4' });
                // create form data for submission         
                let formData = new FormData();
                formData.append('upload_preset', 'CLOUDINARY_UPLOAD_PRESET');
                formData.append('api_key', "CLOUDINARY_API_KEY");
                formData.append('file', finalBlob);
                var xhr = new XMLHttpRequest();
                xhr.open("POST", 'https://api.cloudinary.com/v1_1/CLOUDINARY_CLOUD_NAME/auto/upload');
    
                xhr.onreadystatechange = function () {
                    if (this.readyState == XMLHttpRequest.DONE && this.status == 200) {
                        console.log(this.status);
                        alert("Video uploaded to your cloudinary media library");
                    }
                }
    
                xhr.send(formData);
            }
    
            rec.start(100);
            setTimeout(() => rec.stop(), 2000)
        };
    </script>
    ​
    [...]
    

    Be sure to replace the variables CLOUDINARY_UPLOAD_PRESET, CLOUDINARY_API_KEY, and CLOUDINARY_CLOUD_NAME with their values for your Cloudinary account. To learn how to obtain those values, see the next section.


    스크립트의 다음 내용을 참고하십시오.
  • 이전 줄에서 이전에 인터페이스에서 만든 단추와 비디오 요소를 얻었습니다.
  • 그리고 레코더 단추를 눌렀을 때 실행할 함수를 지정합니다.이 함수는 사용자의 디스플레이에 액세스하고 다음 코드 세그먼트를 사용하여 흐름 index.htmlsrcObject 속성에 할당합니다.
  • let mStream = await navigator.getDisplayMedia({ 'video': true })
    
    videoElement.srcObject = mStream
    
    그리고 화면에 기록된 내용이 표시됩니다.프레젠테이션 응용 프로그램을 실행하면 다음과 같이 표시됩니다.

    다음 섹션에서는 Cloudinary와 녹화를 연결하는 방법에 대해 자세히 설명합니다.이후 녹화된 내용을 Cloudinary 미디어 라이브러리에 저장하여 동영상을 처리하는 다양한 기능을 얻을 수 있습니다.

    Cloudinary와 연결


    연결 프로세스 이해

    videoElement 파일의 코드 세그먼트:
    [...]        
        let opts = { mimeType: 'video/webm; codecs=vp9' };
        let rec = new MediaRecorder(videoElement.srcObject, opts);
        let blobs = [];
    
        rec.ondataavailable = (e) => (e.data && e.data.size > 0) ? blobs.push(e.data) : null;
        rec.onstop = () => {
            //  get the image blob
            let finalBlob = new Blob(blobs, { type: 'video/mp4' });
            // create form data for submission         
            let formData = new FormData();
            formData.append('upload_preset', 'CLOUDINARY_UPLOAD_PRESET');
            formData.append('api_key', "CLOUDINARY_API_KEY");
            formData.append('file', finalBlob);
            var xhr = new XMLHttpRequest();
            xhr.open("POST", 'https://api.cloudinary.com/v1_1/CLOUDINARY_CLOUD_NAME/auto/upload');
            xhr.onreadystatechange = function () {
                if (this.readyState == XMLHttpRequest.DONE && this.status == 200) {
                    console.log(this.status);
                    alert("Video uploaded to your cloudinary media library");
                }
            }
            xhr.send(formData);
        }
        rec.start(100);
        setTimeout(() => rec.stop(), 2000)
    [...]
    
    우리는 먼저 index.html 미디어 기록을 만들어서 핵심 업로드 기능을 실현한다.다음은 videoElement.srcObject 변수의 속성 정의입니다. 기록기가 어떻게 각종 상황에서 행동을 취하는지 지시합니다.rec 부동산은 특수한 이익을 가지고 있다.기록이 완료되면 기록기는 기록된 데이터를 가져와 단일blob으로 Cloudinary에 보냅니다. 여기에는 Cloudinary의 업로드 사전 설정이 포함되어 있습니다.

    업로드한 비디오를 더 처리하려면 Cloudinary 를 이용하십시오.우선 create an account 저기 있습니다.

    클라우드 이름 찾기


    Cloudinary를 사용하여 계정 세부 정보에 클라우드 이름이 표시되는 대시보드(미디어 콘솔)로 이동합니다(아래 화면 캡처 참조).이 이름으로 이전 코드 세그먼트 rec.onstop 파일 CLOUDINARY_CLOUD_NAMECLOUDINARY_API_KEY 변수를 대체합니다.

    Cloudinary 업로드 사전 설정 작성


    Cloudinary Upload 사전 설정을 사용하면 이미지 업로드의 기본 동작을 설정할 수 있습니다.즉, 이미지를 업로드할 때마다 이미지에 적용할 매개 변수를 추가하지 않고 Cloudinary 콘솔에서 태그, 변환 및 기타 분석 사전 설정을 정의할 수 있습니다.코드에 미리 설정된 이름만 지정하면 됩니다!
    사전 설정을 만들려면 Upload Settings 화면으로 이동하여 사전 설정 링크 추가 를 클릭합니다.

    그런 다음 업로드 사전 설정 추가 화면을 표시합니다.

    사전 설정 이름에서 선택한 이름을 입력하고 모드를 서명하지 않음으로 설정한 다음 필요에 따라 다른 세부 정보를 지정합니다.
    이제 index.html 파일로 돌아가서 미리 설정된 이름으로 바꾸십시오 index.html.

    Cloudinary에 업로드 테스트


    현재 모든 Cloudinary 세부 정보를 CLOUDINARY_UPLOAD_PRESET 파일에 추가했습니다. Chrome 브라우저로 이동하여 프레젠테이션 프로그램을 실행하십시오.그러면 다음 화면이 표시됩니다.

    업로드된 비디오 액세스


    업로드된 이미지에 액세스하려면 다음으로 이동하십시오Cloudinary Media Library:

    이제 포맷, 크기 조정, 재단 등 다양한 방식으로 동영상을 쉽고 효율적으로 변환할 수 있습니다.자세한 내용은 을 참조하십시오. Cloudinary Documentation

    계속 전진하다


    이제 Cloudinary와 JavaScript를 사용하여 웹에 간단한 화면 기록기를 구축하는 방법을 배웠습니다.전체 코드는 Github 저장소를 참조하십시오.이 프레젠테이션은 CodePen 에서도 확인할 수 있습니다.
    당신도 Gitbook 강좌를 통해 본문을 방문할 수 있습니다.
    이 강좌에서 설명한 개념을 마음대로 사용하여 다른 응용 프로그램을 구축하십시오.Cloudinary는 일련의 우수한 기능을 제공하여 이미지와 영상 관리를 웹과 모바일 응용 프로그램에서 직관적이고 빈틈없고 신속하게 한다.Docheck them out.

    좋은 웹페이지 즐겨찾기