1.시스템&인프라/스트리밍

[FFmpeg]4.MinGW64로 FFmpeg 7.1 컴파일하기 : SHA-256 Digest 인증 지원, 정적 링크

쿼드큐브 2025. 3. 30. 22:14
728x90

FFmpeg 7.1에서는 기본적으로 SHA-256 기반 Digest 인증을 지원하지 않아 RTSP 연결 시 인증 오류가 발생할 수 있습니다. 이 글에서는 소스 코드를 수정해 SHA-256 Digest 인증을 지원하도록 구성하고, MinGW64 환경에서 정적으로 빌드하는 방법을 소개합니다.

 

MinGW64로 FFmpeg 7.1 컴파일하기 : SHA-256 Digest 인증 지원, 정적 링크

 

목차

1. SHA-256 Digest 인증 오류 개요

2. FFmpeg 소스 코드 수정 방법

3. 정적 빌드 설정 및 실행

4. RTSP Digest 인증 테스트

관련 글 링크

 

 

1. SHA-256 Digest 인증 오류 개요

FFmpeg 7.1 버전에서 RTSP 서버에 연결할 때, 서버가 Digest 인증 알고리즘으로 SHA-256을 사용하는 경우 인증 오류가 발생할 수 있습니다.

이는 FFmpeg가 기본적으로 MD5만 지원하고, SHA-256은 아직 공식적으로 지원하지 않기 때문입니다.

SHA-256 기반 Digest 인증은 RFC 7616에 정의된 보안 프로토콜로, 기존 MD5 기반 방식(RFC 2617)을 보완한 인증 방식입니다. RTSP, HTTP 등 다양한 프로토콜에서 사용됩니다.

 

RTSP 서버가 MD5와 SHA-256을 모두 지원하더라도, FFmpeg는 마지막으로 응답된 SHA-256을 처리하려고 하면서 인증 실패가 발생할 수 있습니다.

D:\TEST\ffmpeg6>ffmpeg -loglevel trace -i "rtsp://xxxxxxxx/media.smp"

 

 

2. FFmpeg 소스 코드 수정 방법

SHA-256 Digest 인증을 처리하려면 httpauth.c 파일을 직접 수정해야 합니다.

참고: 관련 패치 제안은 FFmpeg-devel mailing list 에 올라온 내용을 기반으로 했습니다.
일부 코드는 직접 수정하여 정상 동작하도록 보완하였습니다.

 

1. 수정 파일 위치

C:\msys64\home\ubuntu\ffmpeg\libavformat\httpauth.c

 

2. 헤더 파일 추가

파일 상단에 다음 헤더를 추가합니다:

 

3. normalize_algorithm 함수 추가

FFmpeg는 인증 알고리즘 이름에서 하이픈(-)을 제거한 형식을 사용하므로 변환 함수가 필요합니다.

예: "SHA-256" → "SHA256"

 

4. SHA-256 해시 처리 함수 구현

SHA-256 해시 값을 계산해 Digest 인증에 사용할 수 있도록 구현합니다.

 

5. 인증 처리 함수 수정

ff_http_auth_create_response() 내부에 알고리즘별 분기 처리 코드를 추가하여 MD5, SHA-256 모두 처리할 수 있도록 합니다.

 

6. 소스 파일 첨부

httpauth.c
0.01MB

 

 

3. 정적 빌드 설정 및 실행

코드를 수정한 후, CUDA 가속 및 여러 코덱을 포함한 정적 빌드를 진행합니다.

1. FFmpeg 디렉토리로 이동
cd /home/ubuntu/ffmpeg

2. configure 설정
./configure --prefix=/home/ubuntu/dist \
  --arch=x86_64 --enable-static --disable-shared \
  --disable-debug --disable-doc \
  --enable-gpl --enable-version3 --enable-nonfree \
  --enable-libwebp --enable-libx264 --enable-libx265 \
  --enable-libvpx --enable-libfdk-aac \
  --enable-libvorbis --enable-libopus --enable-libmp3lame \
  --enable-openssl --enable-ffnvcodec --enable-nvdec \
  --enable-nvenc --enable-cuda-llvm --enable-libnpp \
  --enable-cuvid \
  --disable-libass --disable-iconv --disable-autodetect \
  --disable-w32threads \
  --extra-cflags="-static -static-libgcc -static-libstdc++ -I/home/ubuntu/cuda_sdk" \
  --extra-ldflags="-static -static-libgcc -static-libstdc++ -L/home/ubuntu/cuda_sdk" \
  --pkg-config-flags="--static"

3. make 및 설치
$ make -j $(nproc)
$ make install

 

 

4. RTSP Digest 인증 테스트

ffmpeg로 rtsp연결을 시도한 경우 서버에서 지원하는 알고리즘을 확인합니다. 아래는 "MD5"와 "SHA-256"을 지원하는 서버의 출력 예시 입니다.

 

 

fmpeg 요청 종료시 전송하는 TEARDOWN 메세지 입니다. "SHA-256" 알로리즘으로 처리하는 것을 확인할 수 있습니다.

 


FFmpeg 7.1에서 SHA-256 Digest 인증을 지원하도록 소스를 수정하고 정적 빌드하는 과정을 다루었습니다.

RTSP 서버가 SHA-256 기반 인증을 요구할 때 FFmpeg 기본 빌드만으로는 인증에 실패할 수 있으므로, 코드를 수정하여 직접 대응해야 합니다.

 

 

관련 글 링크

 

728x90