반응형


FFmpeg를 사용하여 하나의 동영상 파일을 다중 RTSP 스트리밍하는 방법을 다룹니다.

FFmpeg를 사용하여 하나의 비디오 파일를 입력으로 8개의 RTSP URL을 생성하여  RTSP 스트리밍하는 테스트를 해본 결과입니다.


2020. 10. 10  최초작성






1. 아래 링크에서 rtsp-simple-server windows 버전을 다운로드합니다. 

https://github.com/aler9/rtsp-simple-server/releases 



 

2. 아래 링크에서 윈도우 버전 ffmpeg-release-full.zip를 다운로드합니다.

https://www.gyan.dev/ffmpeg/builds/ 


압축을 풀어 ffmpeg-4.3.1-full_build를 적당한 곳에 복사한다. 

여기에선 c:\에 복사해두고 진행합니다. 




3. 1번에서 다운로드 받은 rtsp-simple-server.exe를 실행합니다. 



4. ffmpeg.exe로 동영상을 스트리밍합니다. 

현재 위치에 스트리밍할때 사용할 cup.mp4 파일을 두고 C:\ffmpeg-4.3.1-full_build\bin\ffmpeg.exe를 다음처럼 실행하여 스트리밍을 시작합니다. 

하나의 동영상으로 하나의 rtsp 스트리밍을 하는 경우입니다. 

rtsp 주소는  rtsp://192.168.25.5:8554/live1가 됩니다. IP 주소는 현재 PC의 IP로 변경하세요.  


C:\ffmpeg-4.3.1-full_build\bin\ffmpeg -re -stream_loop -1 -i cup.mp4  -map 0:v -c:v libx264 -f rtsp rtsp://192.168.25.5:8554/live1



VLC(https://www.videolan.org/vlc/index.ko.html )  설치후 다음처럼 실행하여 스트리밍된 영상을 볼 수 있습니다. 

"C:\Program Files\VideoLAN\VLC\vlc.exe" rtsp://192.168.25.5:8554/live1




5. 다음처럼 하나의 cup.mp4 동영상 파일을 가지고 8개의 rtsp URL을 생성합니다.


이 방법을 사용시 문제점은 CPU 사용률이 높은 것입니다. cup.mp4 640x480 영상 기준으로 8개의 rtsp 스트리밍시 CPU를 80%  이상 점유합니다.

 

C:\ffmpeg-4.3.1-full_build\bin\ffmpeg  -re -stream_loop -1 -i cup.mp4  -map 0:v -c:v libx264 -f rtsp rtsp://192.168.25.5:8554/live1  -map 0:v -c:v libx264 -f rtsp rtsp://192.168.25.5:8554/live2   -map 0:v -c:v libx264 -f rtsp rtsp://192.168.25.5:8554/live3  -map 0:v -c:v libx264 -f rtsp rtsp://192.168.25.5:8554/live4 -map 0:v -c:v libx264 -f rtsp rtsp://192.168.25.5:8554/live5  -map 0:v -c:v libx264 -f rtsp rtsp://192.168.25.5:8554/live6   -map 0:v -c:v libx264 -f rtsp rtsp://192.168.25.5:8554/live7  -map 0:v -c:v libx264 -f rtsp rtsp://192.168.25.5:8554/live8




6. 다음처럼 8개의 영상을 스트리밍한 결과를 볼 수 있습니다. 

사용한 cup.mp4는 640x480 영상으로 네트워크 상태에 따라 스트리밍된 8개의 영상중 일부가 잠시 깨지거나 딜레이가 생기기도합니다. 


ffmpeg 옵션을 최적화할 필요가 있어보입니다. 


사실 하나의 URL을 vlc를 사용하여 여러 번 볼 수도 있지만 본 포스팅의 목적은 여러개의 RTSP URL을 만들어 보는 것입니다. 


"C:\Program Files\VideoLAN\VLC\vlc.exe" rtsp://192.168.25.5:8554/live1

"C:\Program Files\VideoLAN\VLC\vlc.exe" rtsp://192.168.25.5:8554/live2

"C:\Program Files\VideoLAN\VLC\vlc.exe" rtsp://192.168.25.5:8554/live3

"C:\Program Files\VideoLAN\VLC\vlc.exe" rtsp://192.168.25.5:8554/live4

"C:\Program Files\VideoLAN\VLC\vlc.exe" rtsp://192.168.25.5:8554/live5

"C:\Program Files\VideoLAN\VLC\vlc.exe" rtsp://192.168.25.5:8554/live6

"C:\Program Files\VideoLAN\VLC\vlc.exe" rtsp://192.168.25.5:8554/live7

"C:\Program Files\VideoLAN\VLC\vlc.exe" rtsp://192.168.25.5:8554/live8





7. 엔비디아 하드웨어 엔코더 h264_nvenc를 사용하면 제약(?) 때문에 스트리밍 3개만 사용가능한 듯합니다.  

9번에 4개 이상 사용시 보이는 에러 메시지가 언급되어 있습니다. 


CPU 사용률이 낮은 대신 많은 개수의 RTSP 스트리밍을 할 수 없는 단점이 있습니다. 


C:\ffmpeg-4.3.1-full_build\bin\ffmpeg  -re -stream_loop -1 -i cup.mp4  -map 0:v -c:v h264_nvenc  -f rtsp rtsp://192.168.25.5:8554/live1  -map 0:v -c:v h264_nvenc  -f rtsp rtsp://192.168.25.5:8554/live2   


C:\ffmpeg-4.3.1-full_build\bin\ffmpeg  -re -stream_loop -1 -i cup.mp4  -map 0:v -c:v h264_nvenc  -f rtsp rtsp://192.168.25.5:8554/live1  -map 0:v -c:v h264_nvenc  -f rtsp rtsp://192.168.25.5:8554/live2   -map 0:v -c:v h264_nvenc  -f rtsp rtsp://192.168.25.5:8554/live3 




8. 다음처럼 3개의 영상을 볼 수 있습니다.


"C:\Program Files\VideoLAN\VLC\vlc.exe" rtsp://192.168.25.5:8554/live1

"C:\Program Files\VideoLAN\VLC\vlc.exe" rtsp://192.168.25.5:8554/live2

"C:\Program Files\VideoLAN\VLC\vlc.exe" rtsp://192.168.25.5:8554/live3




9. h264_nvenc 사용시 4개를 추가하려고 하면 다음과 같은 에러가 납니다.

 

[h264_nvenc @ 000001ea02db4140] OpenEncodeSessionEx failed: out of memory (10): (no details)

[h264_nvenc @ 000001ea02db4140] No capable devices found


  

ffmpeg의 자세한 옵션은 아래 링크에서 확인하세요

https://trac.ffmpeg.org/wiki/EncodingForStreamingSites





반응형

포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
댓글로 알려주시면 빠른 시일내에 답변을 드리겠습니다.

여러분의 응원으로 좋은 컨텐츠가 만들어집니다.
지금 본 내용이 도움이 되었다면 유튜브 구독 부탁드립니다. 감사합니다 : )

유튜브 구독하기


제가 쓴 책도 한번 검토해보세요.

+ Recent posts