오디오 및 비디오 하드 디코딩 기사-오디오 및 비디오에 대한 기본 지식

오늘날 짧은 비디오 앱은 호황을 누리고 번성하고 있습니다. 짧은 비디오의 등장으로 오디오 및 비디오 개발이 점점 더 많은 관심을 받고 있지만 오디오 및 비디오 개발에는 더 넓은 범위의 지식과 상대적으로 높은 진입 장벽이 포함되어 있기 때문에 많은 개발자가 어려움을 겪고 있습니다.

1. 비디오 란 무엇입니까?

어렸을 때 애니메이션 꼬마 북을 해본 적이 있는지 모르겠는데, 계속 넘기면 꼬마 북의 그림이 현재 gif 형식의 그림과 비슷한 애니메이션이됩니다.
여기에 사진 설명 삽입

원래는 정적 인 작은 책이었는데 뒤집 으면 재미있는 작은 애니메이션이 될 것입니다. 사진이 충분하고 뒤집기 속도가 충분히 빠르다면 실제로는 작은 동영상입니다.

영상의 원리는 똑같고, 인간의 눈의 특수한 구조로 인해 사진이 빠르게 전환 될 때 사진이 그대로 유지되고 일관된 행동처럼 느껴집니다. 따라서 비디오는 일련의 그림으로 구성됩니다.

비디오 프레임

비디오의 기본 개념 인 프레임은 위의 플립 플롭에서 페이지와 같은 그림을 표현하는 프레임입니다. 비디오는 여러 프레임으로 구성됩니다.

프레임 속도

프레임 속도, 즉 단위 시간당 프레임 수 단위는 초당 프레임 또는 fps (초당 프레임)입니다. 예를 들어, 애니메이션 책에서 1 초에 몇 장의 그림이 포함되는지, 그림이 많을수록 그림이 더 부드러워지고 전환이 더 자연스러워집니다.

프레임 속도는 일반적으로 다음과 같은 일반적인 값입니다.

24 / 25fps : 초당 24/25 프레임, 일반 동영상 프레임 속도.
30 / 60fps : 1 초 30/60 프레임, 게임의 프레임 속도, 30 프레임 허용, 60 프레임이 더 부드럽고 사실적으로 느껴집니다.
85fps 이상에서는 인간의 눈으로 기본적으로 감지 할 수 없으므로 더 높은 프레임 속도는 비디오에서 그다지 의미가 없습니다.

색 공간

여기서는 일반적으로 사용되는 두 가지 색상 공간에 대해서만 이야기합니다.

RGB

RGB 색상 모드는 우리가 가장 잘 알고있는 모드 여야하며 현재 전자 장치에서 널리 사용됩니다. RGB의 세 가지 기본 색상을 통해 모든 색상을 혼합 할 수 있습니다.

YUV

여기서는 YUV에 초점을 맞출 것입니다. 이런 색 공간은 우리에게 익숙하지 않습니다. 밝기와 채도를 구분하는 색상 형식입니다.
초기 TV는 모두 흑백, 즉 밝기 값, 즉 Y 만있었습니다. 컬러 TV에서는 두 가지 UV 색도를 추가하여 현재 YUV (YCbCr이라고도 함)를 형성했습니다.
Y : 밝기, 회색 값입니다. 휘도 신호를 표현하는 것 외에도 더 많은 녹색 채널을 포함합니다.
U : 파란색 채널과 밝기의 차이입니다.
V : 적색 채널과 밝기의 차이.

YUV를 사용하면 어떤 이점이 있습니까?

사람의 눈은 밝기에 민감하고 색도에 민감하지 않기 때문에 UV 데이터의 양은 줄어들지 만 사람의 눈으로는 인식 할 수 없습니다. 이렇게하면 UV 해상도를 압축하여 영상에 영향을주지 않고 영상의 볼륨을 줄일 수 있습니다. 보고 느끼다.

RGB 및 YUV 변환

Y = 0.299R + 0.587G + 0.114B 
U =0.147R - 0.289G + 0.436B
V = 0.615R - 0.515G - 0.100B
——————————————————
R = Y + 1.14V
G = Y - 0.39U0.58V
B = Y + 2.03U

2. 오디오 란 무엇입니까?

오디오 데이터를 전달하는 데 가장 일반적으로 사용되는 방법은 펄스 코드 변조 (PCM)입니다.

본질적으로 소리는 연속적이고 아날로그 신호인데 어떻게 소리를 보존 할 수 있습니까? 그것은 소리를 디지털화하는 것입니다. 즉, 그것을 디지털 신호로 변환하는 것입니다.

우리는 소리가 자체 진폭과 주파수를 가진 파동이라는 것을 알고 있으며, 소리를 저장하기 위해서는 다양한 시점에서 소리의 진폭을 저장해야합니다.

디지털 신호는 모든 시점에서 진폭을 지속적으로 저장할 수 없으며 실제로 인간의 귀에 허용되는 소리를 복원하기 위해 연속 신호를 저장할 필요는 없습니다.

Nyquist 샘플링 정리에 따르면 왜곡없이 아날로그 신호를 복원하려면 샘플링 주파수가 아날로그 신호 스펙트럼에서 가장 높은 주파수의 2 배 이상이어야합니다.

위의 분석에 따르면 PCM의 획득 단계는 다음 단계로 나뉩니다.

아날로그 신호-> 샘플링-> 양자화-> 인코딩-> 디지털 신호

여기에 사진 설명 삽입

샘플링 속도 및 샘플링 비트 수

샘플링 속도, 즉 샘플링 빈도입니다.

위에서 언급했듯이 샘플링 속도는 원래 음파 주파수의 두 배 이상이고 사람의 귀가들을 수있는 최고 주파수는 20kHz이므로 사람의 귀의 청력 요구 사항을 충족하기 위해서는 샘플링 속도가되어야합니다. 적어도 40kHz, 일반적으로 44.1kHz이고 더 높은 것은 일반적으로 48kHz입니다.

샘플링 비트의 수는 위에서 언급 한 진폭 양자화와 관련이 있습니다. 파형 진폭은 또한 아날로그 신호의 연속 샘플 값이며 디지털 신호에서 신호는 일반적으로 불연속 적이므로 아날로그 신호를 양자화 한 후에는 대략적인 정수 값만 가져올 수 있습니다. 이러한 진폭 값을 기록하기 위해 , 샘플러는 고정 된 수의 비트를 사용하여 이러한 진폭 값 (일반적으로 8 비트, 16 비트 및 32 비트)을 기록합니다.

자릿수 최저한의 최대
8 0 255
16 -32768 32767
32 -2147483648 2147483647

숫자가 많을수록 기록 된 값이 더 정확하고 복원 정도가 높아집니다.

마지막 단계는 코딩입니다. 디지털 신호는 0과 1로 구성되어 있으므로 저장, 즉 인코딩을 위해 진폭 값을 일련의 0과 1로 변환해야하며 최종 데이터는 디지털 신호입니다 : 일련의 0과 1 개의 데이터.

전체 과정은 다음과 같습니다 : 여기에 사진 설명 삽입
채널 수

채널 수는 서로 다른 사운드를 지원하는 스피커 수를 나타냅니다 (다른 사운드에 유의하십시오).

모노 : 1 채널

듀얼 채널 : 2 채널

스테레오 채널 : 기본적으로 2 채널

스테레오 채널 (4 채널) : 4 채널

비트율

비트 전송률은 데이터 스트림에서 초당 전달할 수있는 정보의 양을 bps (초당 비트) 단위로 나타냅니다.

코드 속도 = 샘플링 속도 * 샘플링 비트 수 * 채널 수

셋, 왜 코딩

여기서 인코딩은 위의 오디오에서 언급 한 인코딩과 동일한 개념이 아니라 압축 인코딩을 의미합니다.

우리는 컴퓨터 세계에서 모든 것이 0과 1로 구성되어 있으며 오디오 및 비디오 데이터도 예외는 아니라는 것을 알고 있습니다. 엄청난 양의 오디오 및 비디오 데이터로 인해 원시 스트림 데이터로 저장되는 경우 전송에 도움이되지 않는 매우 큰 저장 공간이 필요합니다. 실제로 오디오와 비디오에는 0과 1의 반복 데이터가 많이 포함되어 있으므로 특정 알고리즘을 통해 0과 1의 데이터를 압축 할 수 있습니다.

특히 비디오에서는 사진이 점차적으로 전환되기 때문에 전체 비디오에 많은 수의 사진 / 픽셀 반복이 포함되어 매우 큰 압축 공간을 제공합니다.

따라서 인코딩은 오디오 및 비디오 데이터의 크기를 크게 줄여 오디오 및 비디오를보다 쉽게 ​​저장하고 전송할 수 있습니다.

네, 비디오 인코딩

비디오 인코딩 형식

H26x 시리즈 및 MPEG 시리즈 코딩과 같은 많은 비디오 코딩 형식이 있으며 이러한 코딩 형식은 시대의 발전에 적응하기 위해 등장했습니다.

그중 H26x (1/2/3/4/5) 시리즈는 ITU (International Telecommunication Union)
가 주도하고 MPEG (1/2/3/4) 시리즈는 MPEG (Moving Picture Experts Group, ISO 's 자회사). 조직) 지배합니다.

물론 현재의 주류 코딩 형식 인 H264와 차세대 고급 압축 코딩 표준 인 H265 인 공동 코딩 표준도 있습니다.

H264 인코딩 소개

H264는 현재 가장 일반적인 비디오 코딩 표준이므로 주로이 코딩 형식을 후속 기사의 벤치 마크로 사용합니다.

H264는 ITU와 MPEG에 의해 공동으로 사용자 정의되며 MPEG-4의 10 번째 부분에 속합니다.

H264 인코딩 알고리즘은 매우 복잡하기 때문에 한순간에 명확하게 설명 할 수없고 현재의 능력 범위 내에 있지 않기 때문에 여기에서는 일상적인 개발에서 이해해야하는 개념에 대한 간략한 소개 만하겠습니다. 실제로 비디오의 인코딩 및 디코딩 부분은 일반적으로 프레임 워크 (예 : Android 하드웨어 디코딩 / FFmpeg)에 의해 완료되며 일반 개발자는이를 만지지 않습니다.

비디오 프레임

우리는 이미 비디오가 하나의 프레임으로 구성되어 있다는 것을 알고 있지만, 비디오 데이터에서는 실제로 원래 데이터에 따라 한 프레임 씩 저장되지 않습니다 (이 경우 압축 코딩은 무의미합니다).

H264는 일정 시간 내에 영상의 변화에 ​​따라 하나의 프레임을 완전한 인코딩으로 선택하고 다음 프레임의 완전한 데이터와 이전 프레임의 차이 만 기록하는 동적 압축 과정입니다.

H264에서 세 가지 유형의 프레임 데이터는 다음과 같습니다.

I 프레임 : 프레임 내 코딩 된 프레임. 완전한 프레임입니다.

P 프레임 : 순방향 예측 코딩 프레임. 이전 I 프레임 또는 P 프레임을 참조하여 생성 된 불완전한 프레임입니다.

B 프레임 : 양방향 예측 보간 코딩 프레임. 생성하려면 이미지 프레임 인코딩 전후를 참조하십시오. A B 프레임은 가장 가까운 I 프레임 또는 그 앞의 P 프레임과 그 뒤의 가장 가까운 P 프레임에 따라 달라집니다.

사진 그룹 : GOP 및 키 프레임 : IDR

성명 : 사진 그룹. 거의 변경되지 않은 비디오 프레임 그룹을 나타냅니다.

GOP의 첫 번째 프레임이 키 프레임이됩니다. IDR

IDR은 모두 I 프레임이므로 한 프레임이 잘못 디코딩되는 것을 방지하여 모든 후속 프레임에서 디코딩 오류 문제를 일으킬 수 있습니다. 디코더가 IDR을 디코딩 할 때 이전 참조 프레임을 지우고 새 시퀀스를 다시 시작하므로 이전 프레임의 디코딩에서 중대한 오류가 발생하더라도 후속 데이터로 확산되지 않습니다.

참고 : 키 프레임은 모두 I 프레임이지만 I 프레임이 반드시 키 프레임은 아닙니다.

DTS 및 PTS

DTS의 전체 이름 : 디코딩 타임 스탬프. 메모리로 읽은 데이터 스트림이 디코딩을 위해 디코더로 전송되는시기를 나타냅니다. 즉, 디코딩 순서의 타임 스탬프입니다.

PTS의 전체 이름 : 프레젠테이션 타임 스탬프. 디코딩 된 비디오 프레임이 표시 될 때 표시하는 데 사용됩니다.

B-frame이없는 경우 DTS와 PTS의 출력 순서는 동일하며 B-frame이 있으면 PTS와 DTS가 달라집니다.

프레임의 색 공간

앞서 RGB와 YUV라는 두 가지 이미지 색상 공간을 도입했습니다. H264는 YUV를 사용합니다.
YUV 저장 방법은 평면형과 포장 형의 두 가지 범주로 나뉩니다.

평면형 : 먼저 모든 Y를 저장 한 다음 모든 U를 저장하고 마지막으로 V를 저장합니다.

패킹 됨 : 각 픽셀의 Y, U 및 V가 연속적으로 인터리브되고 저장됩니다.
Planar는 다음과 같습니다.

여기에 사진 설명 삽입
다음과 같이 포장 :여기에 사진 설명 삽입

그러나 pakced 저장 방법은 거의 사용되지 않았으며 대부분의 비디오는 평면 저장 방법으로 저장됩니다.

앞서 언급 한 바와 같이 사람의 눈은 색도에 대한 민감도가 낮기 때문에 일부 색도 정보를 생략 할 수있다. 즉, 밝기가 일부 색도 정보를 공유하여 저장 공간을 절약 할 수있다. 따라서 평면은 YUV444, YUV422 및 YUV420 형식을 구분합니다.

YUV 4 : 4 : 4 샘플링, 각 Y는 UV 구성 요소 세트에 해당합니다. 여기에 사진 설명 삽입
YUV 4 : 2 : 2 샘플링, 두 Y마다 UV 구성 요소 세트를 공유합니다. 여기에 사진 설명 삽입
YUV 4 : 2 : 0 샘플링, 4 개의 Y마다 UV 구성 요소 세트를 공유합니다.

여기에 사진 설명 삽입
그중 가장 일반적으로 사용되는 것은 YUV420입니다.

YUV420 형식 저장 방법

YUV420은 평면 저장 방법에 속하지만 두 가지 유형으로 나뉩니다.

YUV420P : 3면 스토리지. 데이터 구성은 YYYYYYYYUUVV (예 : I420) 또는 YYYYYYYYVVUU (예 : YV12)입니다.

YUV420SP : 2- 플레인 스토리지. YYYYYYYYUVUV (예 : NV12) 또는 YYYYYYYYVUVU (예 : NV21)의 두 가지 유형으로 나뉩니다.

H264의 코딩 알고리즘과 데이터 구조와 관련하여 많은 지식과 공간 (예 : 네트워크 추상화 계층 NAL, SPS, PPS)이 있습니다.이 기사는 자세히 다루지 않을 것입니다. 인터넷에도 많은 튜토리얼이 있습니다. 관심이 있으시면 혼자서 더 많은 것을 배울 수 있습니다.

다섯, 오디오 코딩

오디오 인코딩 형식

원본 PCM 오디오 데이터도 매우 많은 양의 데이터이므로 압축 및 인코딩해야합니다.

비디오 인코딩과 마찬가지로 오디오에도 WAV, MP3, WMA, APE, FLAC 등과 같은 많은 인코딩 형식이 있습니다. 음악 애호가는 이러한 형식, 특히 후자의 두 가지 무손실 압축 형식에 대해 매우 잘 알고 있어야합니다.

그러나 오늘날 우리의 주인공은 그것들이 아니라 AAC라는 또 다른 압축 형식입니다.

AAC는 차세대 오디오 손실 압축 기술로 높은 압축률의 오디오 압축 알고리즘입니다. MP4 비디오의 오디오 데이터는 대부분 AAC 압축 형식을 사용합니다.

AAC 코딩 소개

두 가지 주요 AAC 형식이 있습니다 : ADIF 및 ADTS.

ADIF : 오디오 데이터 교환 형식. 오디오 데이터 교환 형식. 이 형식의 특징은 오디오 데이터 스트림의 중간에서 디코딩을 시작할 필요없이 오디오 데이터의 시작을 결정적으로 찾을 수 있다는 것입니다. 즉, 디코딩은 명확하게 정의 된 시작에서 수행되어야합니다. 이 형식은 일반적으로 디스크 파일에 사용됩니다.

ADTS : 오디오 데이터 전송 스트림. 오디오 데이터 전송 스트림. 이 형식의 특징은 동기화 단어가있는 비트 스트림이며이 스트림의 모든 위치에서 디코딩을 시작할 수 있다는 것입니다. 그 특성은 mp3 데이터 스트림 형식과 유사합니다.

ADTS는 모든 프레임에서 디코딩 할 수 있으며 각 프레임에는 헤더 정보가 있습니다. ADIF에는 통합 헤더가 하나만 있으므로 모든 데이터를 가져온 후 디코딩해야합니다. 이 두 헤더의 형식도 다르며 현재는 일반적으로 ADTS 형식의 오디오 스트림이 인코딩됩니다.

ADIF 데이터 형식 :

header	raw_data

ADTS 한 프레임 데이터 형식 (중간 부분, 왼쪽 및 오른쪽 줄임표는 앞뒤 데이터 프레임 임) :여기에 사진 설명 삽입

여섯, 오디오 및 비디오 컨테이너

주의 깊은 독자들은 우리가 소개 한 다양한 오디오 및 비디오 인코딩 형식 중 mp4, rmvb, avi, mkv, mov와 같이 일반적으로 사용하는 비디오 형식이 아님을 발견했을 것입니다.

맞습니다. 이러한 익숙한 비디오 형식은 실제로 오디오 및 비디오 인코딩 데이터를 래핑하는 컨테이너이며, 특정 인코딩 표준으로 인코딩 된 비디오 스트림과 오디오 스트림을 하나의 파일로 혼합하는 데 사용됩니다.

예 : mp4는 H264 및 H265와 같은 비디오 인코딩과 AAC 및 MP3와 같은 오디오 인코딩을 지원합니다.

mp4는 현재 가장 많이 사용되는 비디오 형식이며 모바일 단말기에서는 일반적으로 비디오가 mp4 형식으로 캡슐화됩니다.

일곱, 하드 디코딩 및 소프트 디코딩

하드 솔루션과 소프트 솔루션의 차이점

일부 플레이어에서는 하드 디코딩과 소프트 디코딩의 두 가지 재생 형식이 있음을 알 수 있지만 대부분의 경우 둘 사이의 차이를 느낄 수 없습니다. 일반 사용자의 경우 재생할 수있는 한.

그렇다면 그들 사이의 차이점은 무엇입니까?

휴대폰이나 PC에는 CPU, GPU 또는 디코더와 같은 하드웨어가 있습니다. 일반적으로 계산은 소프트웨어의 실행 칩인 CPU에서 수행되며 GPU는 주로 그림 표시 (일종의 하드웨어 가속)를 담당합니다.

소위 소프트 디코딩은 CPU의 컴퓨팅 성능을 사용하여 디코딩하는 것을 말하며 일반적으로 CPU의 성능이 그다지 강하지 않으면 디코딩 속도가 느려지고 전화기가 과열 될 수 있습니다. 그러나 통합 알고리즘을 사용하기 때문에 호환성이 매우 좋습니다.

하드 디코딩은 디코딩을 가속화하기 위해 휴대폰에서 전용 디코딩 칩을 사용하는 것을 의미합니다. 일반적으로 하드 디코딩의 디코딩 속도는 훨씬 빠르지 만 다양한 제조사에서 하드 디코딩을 구현하기 때문에 품질이 고르지 않고 호환성 문제가 발생하기 쉽습니다.

Linux, C / C ++ Technology Exchange Group : [960994558] 몇 가지 학습 책, 주요 기업의 인터뷰 질문, 공유하기에 더 좋다고 생각하는 인기있는 기술 교육 동영상 자료 (C / C ++, Linux, Nginx, ZeroMQ, MySQL), Redis, fastdfs, MongoDB, ZK, 스트리밍 미디어, CDN, P2P, K8S, Docker, TCP / IP, 코 루틴, DPDK 등), 필요한 경우 직접 추가 할 수 있습니다! ~
오디오 및 비디오 학습 자료
여기에 사진 설명 삽입
FFmpeg / WebRTC / RTMP 오디오 및 비디오 스트리밍 미디어 고급 개발

위의 결함은 토론을 지적 할 수 있으며 기분이 좋은 친구는 귀하의 좋아요와 지원을 받기를 바랍니다.

추천

출처blog.csdn.net/weixin_52622200/article/details/113394632