셀 iOS를 사용하여 텍스쳐 기록하기
입문
샘플 항목
실제 동작의 모습
유니티의 녹화 기능을 만들었습니다.버튼은 왼쪽부터 시작, 점프, 중지 순으로 표시됩니다.영상은 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);
- 렌더링 텍스쳐를 생성하여 녹화 카메라의 대상 텍스처로 설정합니다
- 또한 이 렌더링 텍스쳐를 직렬 필드 속성
으로 설정합니다.
-
복제저장소의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);
- 렌더링 텍스쳐를 생성하여 녹화 카메라의 대상 텍스처로 설정합니다
- 또한 이 렌더링 텍스쳐를 직렬 필드 속성
으로 설정합니다.
- 알파 채널을 저장하려면 "hevcWithAlpha" 를 선택해야 합니다
string cachePath = "file://" + Application.temporaryCachePath + "/tmp.mov";
MediaCreator.InitAsMovWithAudio(cachePath, "h264", width, height);
string cachePath = "file://" + Application.temporaryCachePath + "/tmp.mov";
MediaCreator.InitAsMovWithAudio(cachePath, "h264", texture.width, texture.height, 1, 48_000);
string uuid = System.Guid.NewGuid().ToString();
string cachePath = "file://" + Application.temporaryCachePath + "/tmp.mov";
MediaCreator.InitAsMovWithAudio(cachePath, "h264", width, height, uuid);
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
Reference
이 문제에 관하여(셀 iOS를 사용하여 텍스쳐 기록하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fuziki/items/042c3c5a9333beee6a07
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(셀 iOS를 사용하여 텍스쳐 기록하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/fuziki/items/042c3c5a9333beee6a07텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)