셀 iOS를 사용하여 텍스쳐 기록하기

12502 단어 UnityC#iOS

입문

  • iOS 실기에서 Unity의 Texture와 PCM을 애니메이션으로 녹화하고 저장하는 자산으로 제작
  • 자료고 여기서↓
  • 샘플 항목

  • 예제 항목의 Unity 장면은 아래 그림과 같이 두 개의 카메라
  • 가 구성되어 있습니다
  • 하나는 메인 카메라, 화면에 표시
  • 또 하나는 비디오 카메라용 카메라로 이 카메라의 영상과 주체의 마이크 소리를 녹화한다.mov 형식으로 녹화하여 사진 응용 프로그램에 저장

  • 실제 동작의 모습


    유니티의 녹화 기능을 만들었습니다.버튼은 왼쪽부터 시작, 점프, 중지 순으로 표시됩니다.영상은 mp4로 사진에 저장됩니다!#Unitypic.twitter.com/2NKoExxAEY-후지(@fzkqi)August 17, 2019

    배포 방법



    • 복제저장소Examples/UnityExample/Assets/Plugin/VideoCreator

    사용 방법


    Setup


    오디오 없는 mov 파일 저장


    • 캐시 경로에 절대 경로가 있어야 함
    • 인코더는 "h264"및 "hevcWithAlpha"지원
      • 알파 채널을 저장하려면 "hevcWithAlpha"
      • 를 선택해야 합니다

    • 비디오의 폭 및 높이 지정

    string cachePath = "file://" + Application.temporaryCachePath + "/tmp.mov";
    MediaCreator.InitAsMovWithAudio(cachePath, "h264", width, height);
    

    소리 있는 mov 파일 저장


    • 채널 수 및 샘플링 빈도 지정

    string cachePath = "file://" + Application.temporaryCachePath + "/tmp.mov";
    MediaCreator.InitAsMovWithAudio(cachePath, "h264", texture.width, texture.height, 1, 48_000);
    

    실시간 사진 저장


    • 일반적인 mov 설정 외에 uid
    • 도 지정합니다
    • Live Photos에 사용되지 않으면 uid
    • 를 절대 지정하지 마십시오.

    string uuid = System.Guid.NewGuid().ToString();
    string cachePath = "file://" + Application.temporaryCachePath + "/tmp.mov";
    MediaCreator.InitAsMovWithAudio(cachePath, "h264", width, height, uuid);
    

    사운드를 wav 파일로 저장


    • 채널 수, 샘플링 주파수 및 비트 깊이 지정

    string cachePath = "file://" + Application.temporaryCachePath + "/tmp.wav";
    MediaCreator.InitAsWav(cachePath, 1, 48000, 32);
    

    녹화 시작


    • 입력 프레임의 시작 시간 지정
    • 단위는 마이크로초

    long startTimeOffset = 0;
    MediaCreator.Start(startTimeOffset);
    

    텍스쳐 쓰기


    • 쓸 문양 및 시간 전달
    • 여기 시간도 마이크로초로 지정

    Texture texture = Get Texture;
    long time = startTimeOffset + Elapsed time from Start;
    MediaCreator.WriteVideo(texture, time);
    

    • 렌더링 텍스쳐를 생성하여 녹화 카메라의 대상 텍스처로 설정합니다
    • 또한 이 렌더링 텍스쳐를 직렬 필드 속성
    • 으로 설정합니다.


    PCM 쓰기


    • 부동 소수점과 시간 전달
    • 여기 시간도 마이크로초로 지정

    float[] pcm = Get PCM float array;
    long time = startTimeOffset + Elapsed time from Start;
    MediaCreator.WriteAudio(pcm, time);
    

    • AudioSource를 추가하고 Microphone의 클립을 설정하여 플레이합니다.

    var source = gameObject.AddComponent<AudioSource>();
    var clip = Microphone.Start(null, true, 1, 48_000);
    source.clip = clip;
    source.loop = true;
    while (Microphone.GetPosition(null) < 0) { }
    
    source.Play();
    

    • AudioFilterRead에서 pcm 부동 그룹 가져오기 및 쓰기

    void OnAudioFilterRead(float[] data, int channels)
    {
        writeAudio(data, channels);
    
        for (int i = 0; i < data.Length; i++)
        {
            data[i] = 0;
        }
    }
    

    녹화가 끝나다


    • 동시 녹화 종료
    • 이 프로세스는 시간이 오래 걸릴 수 있습니다

    MediaCreator.FinishSync();
    

    비디오를 앨범에 저장


    • MediaSaver에 저장된 비디오의 URL을 전송하여 앨범에 저장

    MediaSaver.SaveVideo(cachePath);
    

    앨범에 라이브 사진 저장


    • Live Photos도 MediaSaver를 사용하여 저장할 수 있음
    • 애니메이션의 URL 외에 축소판 그림을 전달하는 이미지와 애니메이션을 만들 때 사용하는 uid와 같은 문자열

    MediaSaver.SaveLivePhotos(texture, uuid, cachePath);
    

    마지막


    • Native Plugin 구현 후 Native의 강력한 기능 활용
    • 알파 채널로 저장하거나 Live Photos로 저장하면 다양한 응용이 가능
    • 윈도우즈/macOS로 동영상 저장 → unity3d-jp/FrameCapturer

    좋은 웹페이지 즐겨찾기