반응형

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



2021. 6. 10  최초작성



1. 아래 링크에서 rtsp-simple-server windows 버전을 다운로드받아 적당한 곳에 압축을 풀어서 rtsp-simple-server.exe를 실행합니다. 

 

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

 



다음과 같은 명령 프롬프트 창이 보입니다. 방어벽 메시지 박스가 보이면 반드시 액세스 허용을 해줘야 합니다. 

 

 

RTSP 스트리밍이 될때마다 이 창에 관련 로그가 출력됩니다.

 

 

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

 

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

 




압축을 풀어 적당한 곳에 복사합니다. 여기에선 c:\에 ffmpeg로 폴더 이름을 바꾸어 복사해두고 진행합니다. 

제어판의 시스템에서 시스템 환경 변수 PATH에 c:\ffmpeg\bin을 추가합니다. 

 



3. 윈도우키 + R을 누르고 cmd를 입력하여 명령 프롬프트를 실행합니다. 

 

ipconfig 명령을 사용하여 PC의 IP를 확인합니다. 

 




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.25.5: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.25.5:8554/visual

 




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

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

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

 

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

 



7. 참고로 웹캠 영상을 파일로 저장하려면 다음 명령을 사용합니다. 

 

ffmpeg -f dshow -i video="HD Pro Webcam C920" -r 20 -t 10 camera.mp4



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

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

 

 

import cv2


cap = cv2.VideoCapture("rtsp://192.168.25.5: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 


반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.

도움이 되셨다면 토스아이디로 후원해주세요.
https://toss.me/momo2024


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

+ Recent posts