개발 초보자부터 라이브 방송 소프트웨어 개발의 오디오 및 비디오 전문가까지

1. 성장통

나는 종종 네티즌들로부터 다음과 같은 혼란을 표현하는 편지나 메시지를 받습니다.

"저는 갓 졸업한 학생인데 어떻게 빨리 성장할 수 있나요?"

"저는 C/C++밖에 모릅니다. 안드로이드 개발을 배우는 것이 좋을까요, 아니면 iOS 개발을 배우는 것이 좋을까요?"

"저는 Android/iOS 개발자이며 이미 완전한 앱의 개발 및 출시를 독립적으로 완료할 수 있습니다. 어떻게 계속 개선할 수 있습니까?"

"오디오 및 비디오 개발에 참여하고 싶습니다. 어떻게 시작해야 하나요? 어떻게 발전해야 하나요?"

여러분이 그런 질문을 갖고 있는 것을 보니 기쁘네요. 자신을 발전시키기 위해 끊임없이 노력하고 싶은 긍정적인 사람이라는 측면도 반영되기 때문이죠.

"Android 개발이나 iOS 개발에 미래가 있습니까?"라는 간단한 질문부터 시작하겠습니다.

사실 이 질문은 "PHP가 세계 최고의 언어인가?"와 같은 질문입니다. 논쟁만 불러일으킬 뿐 실질적인 가치는 없습니다. 제 생각에는 Windows, Linux, Android 등 어떤 장점도 단점도 없습니다. 또는 iOS 개발 실제로는 모두 공통점이 많습니다.

이는 모두 특정 요구 사항의 구현을 완료하기 위해 운영 체제에서 제공하는 API를 기반으로 합니다.

물론 다음과 같은 몇 가지 차이점이 있습니다.

  • 시스템 API와 기능이 다릅니다
  • 프로그래밍 언어는 다르며, Windows/Linux는 주로 C/C++, Android는 주로 Java, iOS는 주로 Object C 등입니다.

그러나 어떤 플랫폼에 관계없이 학습 곡선은 실제로 유사하며 거의 다음 단계를 거쳐야 합니다.

  • C/C++, Java, Object C, Javascript 등과 같은 플랫폼에 해당하는 프로그래밍 언어를 배우십시오.
  • UI 라이브러리, 네트워크, 파일, 데이터베이스, 이미지 처리, 멀티미디어 처리 등과 같은 해당 플랫폼에서 제공하는 API에 대해 잘 알고 있어야 합니다.
  • Windows WINSOCK, ODBC, WPF 등, Unix 디자인 철학, Android의 4가지 주요 구성 요소, iOS MVC 패턴 등 마스터 플랫폼 관련 기능, 프레임워크 및 원칙.
  • 특정 프로젝트, 친숙함, 실습을 통해 우리는 모든 기능의 개발을 달성할 수 있습니다.

4단계에 도달하면 병목 현상에 직면했다는 느낌을 자주 받게 되며, 기사 시작 부분에 나온 것과 같은 질문으로 이어집니다. 다음에는 어디로 가야 할까요?

사실, 나는 항상 다음과 같은 관점을 가지고 있었습니다.

"플랫폼 API를 기반으로 한 애플리케이션 개발은 멀리 갈 수 있는 방향이 아닙니다. 진정한 가치는 이를 특정 비즈니스 방향과 결합하는 데 있습니다." 예를 들면 다음과 같습니다.

  • 사이버 보안
  • 오디오 및 비디오
  • 스마트 하드웨어
  • 딥러닝
  • 빅 데이터
  • 기타(예: 금융, 통신 등)

특정 사업 분야에서는 천천히 자리를 잡아 자신의 노력과 시간을 들여 도메인 지식에 대한 심층적인 이해와 축적을 쌓고, 점차적으로 개발 초보자에서 업계를 가장 잘 아는 전문가로 거듭날 수 있습니다.

오늘은 오디오와 비디오 분야에 관심이 있다면 어떻게 시작하고 발전해야 하는지를 주로 공유하겠습니다.

2. 오디오 및 비디오 개발에는 무엇이 포함됩니까?

하나의 기사가 오디오 및 비디오 개발의 모든 지식 포인트를 명확하게 소개할 수는 없지만 일반적인 학습 경로는 여전히 분류할 수 있습니다. 먼저 아래 그림을 살펴보겠습니다.

사실 오디오, 비디오 개발이란 직설적으로 말하면 이미지, 오디오, 비디오에 대한 기본 지식을 익히고, 이를 수집, 렌더링, 처리, 전송하는 방법을 배우는 것과 일련의 개발 및 응용을 의미합니다.

  • 수집: 데이터의 출처에 대한 문제를 해결합니다.
  • 렌더링: 데이터를 표시하는 방법의 문제를 해결합니다.
  • 처리: 데이터를 처리하는 방법에 대한 문제를 해결합니다.
  • 전송: 데이터 공유 방법의 문제를 해결합니다.

각 카테고리는 이미지를 보다 효율적으로 렌더링하는 방법, 오디오 및 비디오의 압축 비율을 개선하는 방법, 약한 네트워크에서 오디오 및 비디오 데이터 전송을 최적화하는 방법과 같은 기술적 과제로 가득 찬 주제를 차례로 탐구하고 파생할 수 있습니다. 등.

사실 오디오, 비디오 개발을 위한 기술 축적은 그리 어렵지 않습니다. 구글에 가서 질문하고, 과제로 연습해 보세요. 아무 문제 없습니다. 위에서 언급한 4가지 방향 중 지식 포인트를 하나씩 탐색해 보도록 하겠습니다. 우리는 그것을 이해하고 마스터합니다.

2.1 수집

수집은 데이터의 출처 문제를 해결하므로 데이터는 어디에서 오는가?

실제로 어떤 플랫폼을 사용하든 이미지와 비디오는 처음에는 카메라에서 나오고 오디오는 처음에는 마이크에서 나오므로 오디오 및 비디오 수집을 위해서는 다음과 같은 기술 지식을 숙지해야 합니다.

a. 시스템의 카메라 획득 인터페이스는 무엇이며 어떻게 사용합니까?

예를 들어:

Windows: DirectShow Linux: V4L2 Android: 카메라 iOS: AVCaptureSession

b. 시스템 카메라가 수집한 매개변수를 구성하는 방법과 그 의미는 무엇입니까?

예: 해상도, 프레임 속도, 미리보기 방향, 초점, 플래시 등

c. 시스템 카메라에서 출력되는 이미지/비디오 데이터의 형식은 무엇이며, 형식별 차이점은 무엇입니까?

예를 들어:

사진: JPEG, 비디오 데이터: NV21, NV12, I420 등

d. 시스템의 마이크 수집 인터페이스는 무엇이며 어떻게 사용합니까?

예를 들어:

Windows: DirectShow Linux: ALSA & OSS Android: AudioRecord iOS: 오디오 유닛

e. 시스템의 마이크 수집 매개변수를 구성하는 방법과 그 의미는 무엇입니까?

예를 들어:

샘플링 속도, 채널 수, 비트 폭 등

f. 시스템 마이크에서 출력되는 오디오 데이터의 형식은 무엇입니까?

예를 들어:

PCM

2.2 렌더링

렌더링은 데이터를 어떻게 표시하느냐의 문제를 해결하는데, 그렇다면 데이터는 어떻게 표시되는가?

실제로 어떤 플랫폼을 사용하든 결국 이미지와 동영상은 뷰에 그려지고 오디오는 결국 스피커로 출력되기 때문에 오디오 및 비디오 렌더링을 하려면 다음과 같은 기술 지식을 숙지해야 합니다.

a. YUV 이미지 데이터의 그림이나 프레임을 그리기 위해 시스템에서 제공하는 API는 무엇입니까?

예를 들어:

Windows: DirectDraw, Direct3D, GDI, OpenGL 등 Linux: GDI, OpenGL 등 Android: ImageView, SurfaceView, TextureView, OpenGL 등 iOS: CoreGraphics, OpenGL 등

b. 시스템은 mp3 또는 pcm 데이터를 재생하기 위해 어떤 API를 제공합니까?

예를 들어:

Windows: DirectSound 등 Linux: ALSA & OSS 등 Android: AudioTrack 등 iOS: AudioQueue 등

2.3 처리

처리(Processing)는 데이터를 처리하는 방법에 대한 문제를 해결합니다. 그렇다면 데이터를 어떻게 처리할 수 있을까요?

먼저, 이미지/오디오, 비디오 데이터에 대해 어떤 처리가 가능한지 살펴보겠습니다.

실제로 이미지, 오디오 및 비디오 처리가 어떤 플랫폼에 있든 시스템 API 외에도 대부분은 일부 크로스 플랫폼 타사 라이브러리에 의존합니다. 라이브러리는 기본적으로 일상적인 오디오 및 비디오 처리 요구 사항을 충족할 수 있습니다. 작업을 처리하기 위해 이러한 라이브러리에는 다음이 포함되지만 이에 국한되지는 않습니다.

a. 이미지 처리: OpenGL, OpenCV, libyuv, ffmpeg 등 b. 비디오 코덱: x264, OpenH264, ffmpeg 등 c. 오디오 처리: speexdsp, ffmpeg 등 d. 오디오 코덱: libfaac, opus, speex, ffmpeg 등

따라서 이러한 타사 라이브러리의 사용법을 배우고 익히는 것이 매우 필요합니다.

2.4 전송

전송은 데이터를 공유하는 방법에 대한 문제를 해결합니다. 그렇다면 데이터는 어떻게 공유됩니까?

공유, 가장 중요한 것은 합의입니다.

인터넷이 이렇게 활발하게 발전하고 전 세계를 밀접하게 연결할 수 있는 이유는 실제로 W3C 위원회의 막대한 공헌과 떼려야 뗄 수 없다고 생각합니다. 왜냐하면 어떤 종류의 데이터라도 서로 다른 국가, 서로 다른 장치 간에 상호 연결하려면 상호 커뮤니케이션이 필요하기 때문입니다. '표준'과 떼려야 뗄 수 없는 '표준'이 있으면 모두가 서로를 이해할 수 있습니다.

따라서 오디오 및 비디오 전송을 연구하는 것은 실제로 프로토콜을 연구하는 것인데, 구체적인 프로토콜에는 어떤 것이 있나요?

a. FLV, ts, mpeg4 등과 같이 전송 전에 오디오 및 비디오를 패키징하는 방법 b. RTMP, RSTP 등과 같은 라이브 스트리밍을 위한 일반적인 프로토콜은 무엇입니까? c. 라이브 스트리밍을 위한 일반적인 프로토콜은 무엇입니까? RTMP, HLS, HDL, RTSP 등과 같은 라이브 스트리밍 d. UDP 기반 프로토콜은 무엇입니까? 예: RTP/RTCP, QUIC 등

인터넷 환경에서 오디오와 비디오의 전송은 매우 도전적이고 가치 있는 방향으로, 취약한 네트워크에서 전송 지연과 멈춤 현상을 해결하고 사용자 경험을 향상시키기 위해 업계 전체가 끊임없이 심층적인 탐색과 최적화를 진행하고 있습니다.

3. 요약

공간적 제약으로 인해 경험 공유는 여기서 끝납니다. 오디오와 비디오로 가는 길은 매우 멀고, 더 많은 것을 스스로 배우고 연습해야 하며, 궁극을 추구하는 정신으로 탐색하고 최적화해야 합니다. 저는 여러분이 믿습니다. 빠르게 성장하여 진정한 업계 전문가가 될 수 있습니다! 마지막으로 오디오 및 비디오 개발 학습 경로를 추천하고 싶습니다.

이 기사의 혜택으로 무료 C++ 오디오 및 비디오 학습 자료 패키지 + 학습 경로 개요, 기술 비디오/코드(오디오 및 비디오 개발, 인터뷰 질문, FFmpeg, webRTC, rtmp, hls, rtsp, ffplay, 코덱, 푸시풀 스트리밍, srs )↓↓↓↓↓↓아래 참조↓↓기사 하단을 클릭하시면 무료로 받아보실 수 있습니다↓↓

추천

출처blog.csdn.net/m0_73443478/article/details/135167957