Thỉnh thoảng tôi bắt gặp câu hỏi "Làm thế nào để lấy ảnh chụp của IP Camera bằng code Python". Hầu hết câu trả lời, của cả Tây lẫn Việt, đều là kêu người ta dùng OpenCV.
Quan điểm của tôi là, OpenCV tốt đấy, nhưng nếu chỉ để lấy ảnh chụp của camera thôi mà dùng OpenCV thì chuối quá. Thứ nhất, OpenCV là thư viện dành cho computer vision, nên nếu không khai thác gì đến tính năng đó mà ôm OpenCV vào thì nặng nề, dư thừa không cần thiết. Đằng nào thì tự OpenCV cũng không có khả năng xử lý giao thức RTSP mà nó phải gọi đến FFmpeg , nên để cho gọn ghẽ, tốt hơn là dùng thẳng FFmpeg để bắt hình camera đi. Thứ hai, tệ hơn nữa, mặc dù OpenCV sử dụng FFmpeg bên dưới, nó cũng không khai thác FFmpeg đúng cách nên có nhiều IP Camera cũng truyền video qua giao thức RTSP mà nó không lấy được. Lí do là RTSP có thể truyền trên TCP hoặc UDP, nhưng OpenCV được hardcode để gọi FFmpeg với chỉ mỗi TCP, thành ra nếu IP Camera truyền với "RTSP over UDP" thì OpenCV không lấy được.
Vậy giải pháp là gì?
...