ffmpeg

FFmpeg를 사용하여 webcam을 RTSP 스트리밍 하여 OpenCV에서 확인하기

webnautes 2024. 6. 23. 07:45
반응형

FFmpeg를 사용하여 webcam을 RTSP 스트리밍하고 OpenCV에서 해당 영상을 확인하는 과정을 다룹니다. 



2021. 6. 10  최초작성

2024. 6. 23  최종작성




1. 아래 링크에서 mediamtx windows 버전( 이름에 windows_amd64가 붙은 것)을 다운로드하여 적당한 곳에 압축을 풀어줍니다.

 

https://github.com/bluenviron/mediamtx/releases 





mediamtx.exe를 실행합니다. 접속을 허용하냐고 물어보면 예를 클릭합니다.

 



다음처럼 실행됩니다.

 



 

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

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

 

압축을 풀어 ffmpeg-7.0-full_build 폴더를 ffmpeg라고 이름을 바꿔서  c:\에 복사해두고 진행합니다.  폴더 이름 중 7.0 부분은 바뀔 수 있습니다.

 



3. 현재 PC의 IP주소를 확인합니다.

 

윈도우 키 + R을 누른 후 cmd 엔터를 눌러 명령 프롬프트를 실행합니다.

 



ipconfig를 입력후 엔터를 눌러 실행합니다. 다음처럼 기본 게이트웨이가 출력되는 항목에 있는 IPv4 주소를 사용합니다. 

 



4. 웹캠을 PC에 연결하고 다음 명령을 사용하여 사용가능한 디바이스 이름을 확인합니다. 

여기에선 웹캠 이름 "HD Pro Webcam C920"를 확인했습니다. 

 

ffmpeg -list_devices true -f dshow -i dummy

 

[dshow @ 00000238e576b200]  "HD Pro Webcam C920"

[dshow @ 00000238e576b200]     Alternative name "@device_pnp_\\?\usb#vid_046d&pid_082d&mi_00#6&f546908&1&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global"




앞에서 확인한 웹캠 이름과 IP 주소를 변경하여 다음 명령을 실행합니다. 

 

ffmpeg -f dshow -video_size 640*480 -i video="HD Pro Webcam C920" -r 30  -c:v libx264 -preset fast -tune zerolatency  -f rtsp -rtsp_transport tcp rtsp://192.168.45.245:8554/visual



마지막 줄에 다음처럼 보이면서 frame 항목의 숫자가 증가해야 합니다. 

 

frame=   62 fps= 31 q=25.0 size=N/A time=00:00:02.03 bitrate=N/A speed=1.01x



5. 명령 프롬프트 창을 새로 열어서 ffmpeg에 포함된 다음 명령을 사용하여 스트리밍된 웹캠 영상을 확인할 수 있습니다. 

빨간색 부분은 앞에서 확인한 IP 주소로 변경해야 합니다. 

방어벽 메시지 박스가 보이면 엑세스 허용을 해줘야 합니다. 

 

ffplay -fflags nobuffer -flags low_delay rtsp://192.168.45.245:8554/visual

 




6. 명령 프롬프트 창을 새로 열어서 vlc를 사용하여 확인할 수도 있습니다. 

빨간색 부분은 앞에서 확인한 IP 주소로 변경해야 합니다.

방어벽 메시지 박스가 보이면 엑세스 허용을 해줘야 합니다. 

 

"C:\Program Files\VideoLAN\VLC\vlc.exe" rtsp://192.168.45.245:8554/visual

 




7. 다음 OpenCV 코드를 사용하여 스트리밍 영상을 플레이할 수 있습니다. 

C++에서도 VideoCapture 함수에 RTSP 주소만 넣어주면 됩니다. 

 

 

import cv2


cap = cv2.VideoCapture("rtsp://192.168.45.245:8554/visual" )


while True:

    ret,img = cap.read()

    if ret == True:
        cv2.imshow("webcam", img)

    key = cv2.waitKey(1)

    if key == 27:
        break

 

 





참고

 

https://www.bogotobogo.com/VideoStreaming/ffmpeg_webcam_capture_Windows.php 

 

https://github.com/mtinet/ffmpegStreamming/blob/b22f82a4b1c47f9e0547290b19715e877db6d894/README.md 

 

반응형