av1Codec 해 보았습니다.
개요
webrtc에 대해, 여러가지 찾고 있으면 눈에 멈추었으므로, 조금 움직여 보았습니다.
h tps // 아오메아. 오, 그래. 코m/
이 녀석이군요.
이번에 만든 것.
htps : // 기주 b. 코 m / 타 k와 d / 아오 m ぇ ck
우선 동작하는 것을 원했기 때문에 만들어 보았습니다.
프로그램은 세
하나는 opencvTest.c
이것은 aom에서 encode/decode하기 전에 필요한 것이 제대로 갖추어져 있는지 확인하는 의미로 만들었습니다.
ffmpeg의 내장 코덱 인 avcodec에서 디코딩
opencv의 이미지 표시 동작을 사용하여 디코딩 된 데이터를 표시합니다.
그대로 코드 쓰면 귀찮기 때문에, 자작 라이브러리의 ttLibC를 사용해 동작 보조하고 있습니다.
두 번째는 encode.c
ffmpeg avcodec에서 디코딩
aom을 사용하여 av1의 코덱으로 인코딩
적절한 형식이 없으므로 (* 1) 4byte + frame의 binary 형태의 bin 파일에 저장
세 번째는 decode.c
encode.c로 만든 bin 파일로드
aom을 사용하여 av1의 Codec로 디코딩
opencv로 이미지 표시
라는 동작이 되고 있습니다.
테스트한 환경

이런 환경에서 실시해 보았습니다.
ffmpeg, opencv는 brew로 설치되었습니다.
readme에도 썼지만 aom과 ttLibC는 프로젝트 디렉토리에 펼쳐 컴파일만 실시했습니다. 시스템은 더러워지지 않습니다.
만들어 보는 감상
뭐니뭐니해도 libvpx 똑같이.
사용법이 거의 함께 갈 수 있었기 때문에 편했습니다.
현재 실험 코드인 CONFIG_ANS를 활성화하지 않으면 encode도 decode도 동결하는 것 같습니다.
encode는 확실히 느립니다. (*2)
라이브계의 서비스 하고 있는 인간으로서는, 와우···라고 하는 느낌이었습니다.
data->cfg.rc_max_quantizer = 31;
data->cfg.rc_min_quantizer = 11;
data->cfg.g_timebase.num = 1;
data->cfg.g_timebase.den = 60;
data->cfg.rc_target_bitrate = 500; // 500kbps
data->cfg.g_pass = AOM_RC_ONE_PASS;
data->cfg.g_threads = 4;
res = aom_codec_enc_init(&data->codec, aom_codec_av1_cx(), &data->cfg, 0);
if(res != AOM_CODEC_OK) {
puts("filed to initialize aom. part2.");
return false;
}
aom_codec_control(&data->codec, AOME_SET_CPUUSED, 8);
일단 멀티스레드로 작업시켜 SET_CPUUSED로 처리를 경감해 보았습니다만, 속도가 아니네요.
이것, 일단 webrtc로 이용할 생각이군요. 어쩌면.
decode는, 뭐 저기의 속도로군요. 과연 이 PC에서 HD 화질의 60fps의 재생해 보면, 와우・・・한 결과가 되었습니다만
640x360 정도, 30fps 정도라면, 오, 한다는 결과가 되었습니다.
메모
*1: 적당한 포맷이 없다고 썼습니다만, 본래는 webm(av1/opus)가 되는 것 같습니다.
webm으로 보존해도 좋았습니다만, 어떻게 보존할지 조사하는 것도 귀찮았고, 만들어도 앞으로 사양이 바뀌어 보였기 때문에, 스루 했습니다.
단순히 decode 동작만 꺼내고 싶었기 때문에, 이번은 timestamp등도 적당합니다.
*2: 좀 더 사양이 좋은 MacBookAir로, 전날부터 이 코드로
큰 벅 버니 (http://bbb3d.renderfarming.net/download.html)
Standard 2D full HD의 60fps 데이터를 변환하고 있지만 아직 끝나지 않는다.
Reference
이 문제에 관하여(av1Codec 해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/taktod/items/3bd141f16df9c13e978f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
htps : // 기주 b. 코 m / 타 k와 d / 아오 m ぇ ck
우선 동작하는 것을 원했기 때문에 만들어 보았습니다.
프로그램은 세
하나는 opencvTest.c
이것은 aom에서 encode/decode하기 전에 필요한 것이 제대로 갖추어져 있는지 확인하는 의미로 만들었습니다.
ffmpeg의 내장 코덱 인 avcodec에서 디코딩
opencv의 이미지 표시 동작을 사용하여 디코딩 된 데이터를 표시합니다.
그대로 코드 쓰면 귀찮기 때문에, 자작 라이브러리의 ttLibC를 사용해 동작 보조하고 있습니다.
두 번째는 encode.c
ffmpeg avcodec에서 디코딩
aom을 사용하여 av1의 코덱으로 인코딩
적절한 형식이 없으므로 (* 1) 4byte + frame의 binary 형태의 bin 파일에 저장
세 번째는 decode.c
encode.c로 만든 bin 파일로드
aom을 사용하여 av1의 Codec로 디코딩
opencv로 이미지 표시
라는 동작이 되고 있습니다.
테스트한 환경

이런 환경에서 실시해 보았습니다.
ffmpeg, opencv는 brew로 설치되었습니다.
readme에도 썼지만 aom과 ttLibC는 프로젝트 디렉토리에 펼쳐 컴파일만 실시했습니다. 시스템은 더러워지지 않습니다.
만들어 보는 감상
뭐니뭐니해도 libvpx 똑같이.
사용법이 거의 함께 갈 수 있었기 때문에 편했습니다.
현재 실험 코드인 CONFIG_ANS를 활성화하지 않으면 encode도 decode도 동결하는 것 같습니다.
encode는 확실히 느립니다. (*2)
라이브계의 서비스 하고 있는 인간으로서는, 와우···라고 하는 느낌이었습니다.
data->cfg.rc_max_quantizer = 31;
data->cfg.rc_min_quantizer = 11;
data->cfg.g_timebase.num = 1;
data->cfg.g_timebase.den = 60;
data->cfg.rc_target_bitrate = 500; // 500kbps
data->cfg.g_pass = AOM_RC_ONE_PASS;
data->cfg.g_threads = 4;
res = aom_codec_enc_init(&data->codec, aom_codec_av1_cx(), &data->cfg, 0);
if(res != AOM_CODEC_OK) {
puts("filed to initialize aom. part2.");
return false;
}
aom_codec_control(&data->codec, AOME_SET_CPUUSED, 8);
일단 멀티스레드로 작업시켜 SET_CPUUSED로 처리를 경감해 보았습니다만, 속도가 아니네요.
이것, 일단 webrtc로 이용할 생각이군요. 어쩌면.
decode는, 뭐 저기의 속도로군요. 과연 이 PC에서 HD 화질의 60fps의 재생해 보면, 와우・・・한 결과가 되었습니다만
640x360 정도, 30fps 정도라면, 오, 한다는 결과가 되었습니다.
메모
*1: 적당한 포맷이 없다고 썼습니다만, 본래는 webm(av1/opus)가 되는 것 같습니다.
webm으로 보존해도 좋았습니다만, 어떻게 보존할지 조사하는 것도 귀찮았고, 만들어도 앞으로 사양이 바뀌어 보였기 때문에, 스루 했습니다.
단순히 decode 동작만 꺼내고 싶었기 때문에, 이번은 timestamp등도 적당합니다.
*2: 좀 더 사양이 좋은 MacBookAir로, 전날부터 이 코드로
큰 벅 버니 (http://bbb3d.renderfarming.net/download.html)
Standard 2D full HD의 60fps 데이터를 변환하고 있지만 아직 끝나지 않는다.
Reference
이 문제에 관하여(av1Codec 해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/taktod/items/3bd141f16df9c13e978f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
뭐니뭐니해도 libvpx 똑같이.
사용법이 거의 함께 갈 수 있었기 때문에 편했습니다.
현재 실험 코드인 CONFIG_ANS를 활성화하지 않으면 encode도 decode도 동결하는 것 같습니다.
encode는 확실히 느립니다. (*2)
라이브계의 서비스 하고 있는 인간으로서는, 와우···라고 하는 느낌이었습니다.
data->cfg.rc_max_quantizer = 31;
data->cfg.rc_min_quantizer = 11;
data->cfg.g_timebase.num = 1;
data->cfg.g_timebase.den = 60;
data->cfg.rc_target_bitrate = 500; // 500kbps
data->cfg.g_pass = AOM_RC_ONE_PASS;
data->cfg.g_threads = 4;
res = aom_codec_enc_init(&data->codec, aom_codec_av1_cx(), &data->cfg, 0);
if(res != AOM_CODEC_OK) {
puts("filed to initialize aom. part2.");
return false;
}
aom_codec_control(&data->codec, AOME_SET_CPUUSED, 8);
일단 멀티스레드로 작업시켜 SET_CPUUSED로 처리를 경감해 보았습니다만, 속도가 아니네요.
이것, 일단 webrtc로 이용할 생각이군요. 어쩌면.
decode는, 뭐 저기의 속도로군요. 과연 이 PC에서 HD 화질의 60fps의 재생해 보면, 와우・・・한 결과가 되었습니다만
640x360 정도, 30fps 정도라면, 오, 한다는 결과가 되었습니다.
메모
*1: 적당한 포맷이 없다고 썼습니다만, 본래는 webm(av1/opus)가 되는 것 같습니다.
webm으로 보존해도 좋았습니다만, 어떻게 보존할지 조사하는 것도 귀찮았고, 만들어도 앞으로 사양이 바뀌어 보였기 때문에, 스루 했습니다.
단순히 decode 동작만 꺼내고 싶었기 때문에, 이번은 timestamp등도 적당합니다.
*2: 좀 더 사양이 좋은 MacBookAir로, 전날부터 이 코드로
큰 벅 버니 (http://bbb3d.renderfarming.net/download.html)
Standard 2D full HD의 60fps 데이터를 변환하고 있지만 아직 끝나지 않는다.
Reference
이 문제에 관하여(av1Codec 해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/taktod/items/3bd141f16df9c13e978f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)