미디어서버(Nginx RTMP)

Nginx.conf의 옵션들 (Nginx RTMP) 및 화질 여러개 송출

cocodingding 2024. 3. 10. 00:56
  • keyframe
    • 시작 프레임과 끝 프레임 중에 전체 정보를 가지고 있는 중심 프레임
    • 특정 시간동안 시작 프레임부터 끝 프레임까지 설정값이 변하면서 움직임을 만듬
  • keyframe 간격
    • 전체 이미지가 전송되는 빈도를 결정하는 인코딩 설정
  • preset
    • 영상 또는 오디오 스트리밍을 위한 인코딩 프로파일을 지정
    • 여기서 ultrafast는 인코딩 속도를 최적화하는 프리셋 중 하나로, 이 설정은 인코딩 속도를 우선시하여 품질보다는 속도에 중점을 둔다.
  • fragment
    • 비디오 파일의 일부분으로, 동영상을 여러개의 작은 조각으로 분할한 것.
      • fragment의 길이가 너무 짧으면 클라이언트는 더 자주 요청하게 되고 프래그먼트 파일 생성 속도보다 요청 속도가 더 빨라 에러가 발생할 수 있다.
      • 반면에 fragment의 길이가 너무 길면 긴 지연시간을 유발할 수 있다.
    • HLS 및 기타 스트리밍 프로토콜에서는 프래그먼트를 사용하여 동영상을 분할하고, 이를 클라이언트에 전송
    • 클라이언트는 이러한 프래그먼트를 순서대로 받아 재생
  • chunk size
    • chunk size는 네트워크 대역폭과 지연 시간을 고려하여 설정해야함.
    • 작은 chunk size는 작은 데이터 조각을 전송하여 지연 시간을 줄이고, 대역폭을 효율적으로 사용할 수 있지만, 오버헤드가 증가할 수 있다.
    • 반면에 큰 chunk size는 대량의 데이터를 한 번에 전송하여 대역폭을 더 효율적으로 사용할 수 있지만, 지연 시간이 증가할 수 있다
  • playlist length
    • HLS에서 사용되는 재생목록의 파일의 길이를 나타냄
    • 이 길이는 일반적으로 몇 초동안의 세그먼트를 포함하는지를 나타내, 스트리밍의 부드러운 재생과 지연 시간 간의 균형을 맞추기 위해 조정된다.

 

화질 여러개 송출하기

rtmp {
        server {
                listen 1935;
                #listen [::]:1935 ipv6only=on;    
                chunk_size 3000;

                application stream {
                        live on;
                        exec ffmpeg -i rtmp://비밀/stream/$name
                        -vf scale=1280:720 -c:v libx264 -c:a aac -preset ultrafast -g 90 -f flv rtmp://비밀/live/$name_720p
                        -vf scale=854:480 -c:v libx264 -c:a aac -preset ultrafast -g 90 -f flv rtmp://비밀/live/$name_480p
                        -vf scale=640:360 -c:v libx264 -c:a aac -preset ultrafast -g 90 -f flv rtmp://비밀/live/$name_360p;
                }

                application live {
                    live on;
                    record off;

                    hls on;
                    hls_path /var/www/html/stream/hls;
                    hls_nested off;
                    hls_fragment 2s;
                    hls_playlist_length 5s;

                }
        }
}

스케일을 다르게 해서 이름이 다른 영상 파일을 3개 만들어서

프론트 코드에서 영상별로 가져올 수 있게 했다.