I'm trying to process an RTMP stream in Python, using OpenCV2 but I'm not able to get OpenCV to capture it (i.e. act as RTMP server).
I can run FFmpeg/FFplay from the command line and receive the stream successfully.What could cause OpenCV to fail opening the stream in listening mode?
Here is my code:
import cv2cap = cv2.VideoCapture("rtmp://0.0.0.0:8000/live", cv2.CAP_FFMPEG)if not cap.isOpened(): print("Cannot open video source") exit()
And the output:
[tcp @ 00000192c490d640] Connection to tcp://0.0.0.0:8000 failed: Error number -138 occurred[rtmp @ 00000192c490d580] Cannot open connection tcp://0.0.0.0:8000 Cannot open video source
edit2: Output with debug logging turned on:
output of the python script with debug logging on:[DEBUG:0@0.017] global videoio_registry.cpp:218 cv::`anonymous-namespace'::VideoBackendRegistry::VideoBackendRegistry VIDEOIO: Builtin backends(9): FFMPEG(1000); GSTREAMER(990); INTEL_MFX(980); MSMF(970); DSHOW(960); CV_IMAGES(950); CV_MJPEG(940); UEYE(930); OBSENSOR(920)[DEBUG:0@0.026] global videoio_registry.cpp:242 cv::`anonymous-namespace'::VideoBackendRegistry::VideoBackendRegistry VIDEOIO: Available backends(9): FFMPEG(1000); GSTREAMER(990); INTEL_MFX(980); MSMF(970); DSHOW(960); CV_IMAGES(950); CV_MJPEG(940); UEYE(930); OBSENSOR(920)[ INFO:0@0.031] global videoio_registry.cpp:244 cv::`anonymous-namespace'::VideoBackendRegistry::VideoBackendRegistry VIDEOIO: Enabled backends(9, sorted by priority): FFMPEG(1000); GSTREAMER(990); INTEL_MFX(980); MSMF(970); DSHOW(960); CV_IMAGES(950); CV_MJPEG(940); UEYE(930); OBSENSOR(920)[ WARN:0@0.037] global cap.cpp:132 cv::VideoCapture::open VIDEOIO(FFMPEG): trying capture filename='rtmp://192.168.254.101:8000/live' ...[ INFO:0@0.040] global backend_plugin.cpp:383 cv::impl::getPluginCandidates Found 2 plugin(s) for FFMPEG[ INFO:0@0.043] global plugin_loader.impl.hpp:67 cv::plugin::impl::DynamicLib::libraryLoad load C:\Users\me\src\opencv\.venv\Lib\site-packages\cv2\opencv_videoio_ffmpeg490_64.dll => OK[ INFO:0@0.047] global backend_plugin.cpp:50 cv::impl::PluginBackend::initCaptureAPI Found entry: 'opencv_videoio_capture_plugin_init_v1'[ INFO:0@0.049] global backend_plugin.cpp:169 cv::impl::PluginBackend::checkCompatibility Video I/O: initialized 'FFmpeg OpenCV Video I/O Capture plugin': built with OpenCV 4.9 (ABI/API = 1/1), current OpenCV version is '4.9.0' (ABI/API = 1/1)[ INFO:0@0.055] global backend_plugin.cpp:69 cv::impl::PluginBackend::initCaptureAPI Video I/O: plugin is ready to use 'FFmpeg OpenCV Video I/O Capture plugin'[ INFO:0@0.058] global backend_plugin.cpp:84 cv::impl::PluginBackend::initWriterAPI Found entry: 'opencv_videoio_writer_plugin_init_v1'[ INFO:0@0.061] global backend_plugin.cpp:169 cv::impl::PluginBackend::checkCompatibility Video I/O: initialized 'FFmpeg OpenCV Video I/O Writer plugin': built with OpenCV 4.9 (ABI/API = 1/1), current OpenCV version is '4.9.0' (ABI/API = 1/1)[ INFO:0@0.065] global backend_plugin.cpp:103 cv::impl::PluginBackend::initWriterAPI Video I/O: plugin is ready to use 'FFmpeg OpenCV Video I/O Writer plugin'[tcp @ 00000266b2f0d0c0] Connection to tcp://192.168.254.101:8000 failed: Error number -138 occurred[rtmp @ 00000266b2f0cfc0] Cannot open connection tcp://192.168.254.101:8000[ WARN:0@5.630] global cap.cpp:155 cv::VideoCapture::open VIDEOIO(FFMPEG): can't create capture[DEBUG:0@5.632] global cap.cpp:225 cv::VideoCapture::open VIDEOIO: choosen backend does not work or wrong. Please make sure that your computer support chosen backend and OpenCV built with right flags.Cannot open video source[ INFO:1@5.661] global plugin_loader.impl.hpp:74 cv::plugin::impl::DynamicLib::libraryRelease unload C:\Users\me\src\opencv\.venv\Lib\site-packages\cv2\opencv_videoio_ffmpeg490_64.dll
Here is the output of cv2.getBuildInformation()
General configuration for OpenCV 4.9.0 ===================================== Version control: 4.9.0 Platform: Timestamp: 2023-12-31T11:21:12Z Host: Windows 10.0.17763 AMD64 CMake: 3.24.2 CMake generator: Visual Studio 14 2015 CMake build tool: MSBuild.exe MSVC: 1900 Configuration: Debug Release CPU/HW features: Baseline: SSE SSE2 SSE3 requested: SSE3 Dispatched code generation: SSE4_1 SSE4_2 FP16 AVX AVX2 requested: SSE4_1 SSE4_2 AVX FP16 AVX2 AVX512_SKX SSE4_1 (16 files): + SSSE3 SSE4_1 SSE4_2 (1 files): + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 (0 files): + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 AVX AVX (8 files): + SSSE3 SSE4_1 POPCNT SSE4_2 AVX AVX2 (36 files): + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 FMA3 AVX AVX2 C/C++: Built as dynamic libs?: NO C++ standard: 11 C++ Compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/x86_amd64/cl.exe (ver 19.0.24247.2) C++ flags (Release): /DWIN32 /D_WINDOWS /W4 /GR /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi /fp:precise /EHa /wd4127 /wd4251 /wd4324 /wd4275 /wd4512 /wd4589 /wd4819 /MP /O2 /Ob2 /DNDEBUG C++ flags (Debug): /DWIN32 /D_WINDOWS /W4 /GR /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi /fp:precise /EHa /wd4127 /wd4251 /wd4324 /wd4275 /wd4512 /wd4589 /wd4819 /MP /Zi /Ob0 /Od /RTC1 C Compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/x86_amd64/cl.exe C flags (Release): /DWIN32 /D_WINDOWS /W3 /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi /fp:precise /MP /O2 /Ob2 /DNDEBUG C flags (Debug): /DWIN32 /D_WINDOWS /W3 /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi /fp:precise /MP /Zi /Ob0 /Od /RTC1 Linker flags (Release): /machine:x64 /NODEFAULTLIB:atlthunk.lib /INCREMENTAL:NO /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:libcpmtd.lib /NODEFAULTLIB:msvcrtd.lib Linker flags (Debug): /machine:x64 /NODEFAULTLIB:atlthunk.lib /debug /INCREMENTAL /NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:libcpmt.lib /NODEFAULTLIB:msvcrt.lib ccache: NO Precompiled headers: YES Extra dependencies: wsock32 comctl32 gdi32 ole32 setupapi ws2_32 3rdparty dependencies: libprotobuf ade ittnotify libjpeg-turbo libwebp libpng libtiff libopenjp2 IlmImf zlib ippiw ippicv OpenCV modules: To be built: calib3d core dnn features2d flann gapi highgui imgcodecs imgproc ml objdetect photo python3 stitching video videoio Disabled: java world Disabled by dependency: - Unavailable: python2 ts Applications: - Documentation: NO Non-free algorithms: NO Windows RT support: NO GUI: WIN32UI Win32 UI: YES VTK support: NO Media I/O: ZLib: build (ver 1.3) JPEG: build-libjpeg-turbo (ver 2.1.3-62) SIMD Support Request: YES SIMD Support: NO WEBP: build (ver encoder: 0x020f) PNG: build (ver 1.6.37) TIFF: build (ver 42 - 4.2.0) JPEG 2000: build (ver 2.5.0) OpenEXR: build (ver 2.3.0) HDR: YES SUNRASTER: YES PXM: YES PFM: YES Video I/O: DC1394: NO FFMPEG: YES (prebuilt binaries) avcodec: YES (58.134.100) avformat: YES (58.76.100) avutil: YES (56.70.100) swscale: YES (5.9.100) avresample: YES (4.0.0) GStreamer: NO DirectShow: YES Media Foundation: YES DXVA: YES Parallel framework: Concurrency Trace: YES (with Intel ITT) Other third-party libraries: Intel IPP: 2021.11.0 [2021.11.0] at: D:/a/opencv-python/opencv-python/_skbuild/win-amd64-3.7/cmake-build/3rdparty/ippicv/ippicv_win/icv Intel IPP IW: sources (2021.11.0) at: D:/a/opencv-python/opencv-python/_skbuild/win-amd64-3.7/cmake-build/3rdparty/ippicv/ippicv_win/iw Lapack: NO Eigen: NO Custom HAL: NO Protobuf: build (3.19.1) Flatbuffers: builtin/3rdparty (23.5.9) OpenCL: YES (NVD3D11) Include path: D:/a/opencv-python/opencv-python/opencv/3rdparty/include/opencl/1.2 Link libraries: Dynamic load Python 3: Interpreter: C:/hostedtoolcache/windows/Python/3.7.9/x64/python.exe (ver 3.7.9) Libraries: C:/hostedtoolcache/windows/Python/3.7.9/x64/libs/python37.lib (ver 3.7.9) numpy: C:/hostedtoolcache/windows/Python/3.7.9/x64/lib/site-packages/numpy/core/include (ver 1.17.0) install path: python/cv2/python-3 Python (for build): C:\hostedtoolcache\windows\Python\3.7.9\x64\python.exe Java: ant: NO Java: YES (ver 1.8.0.392) JNI: C:/hostedtoolcache/windows/Java_Temurin-Hotspot_jdk/8.0.392-8/x64/include C:/hostedtoolcache/windows/Java_Temurin-Hotspot_jdk/8.0.392-8/x64/include/win32 C:/hostedtoolcache/windows/Java_Temurin-Hotspot_jdk/8.0.392-8/x64/include Java wrappers: NO Java tests: NO Install to: D:/a/opencv-python/opencv-python/_skbuild/win-amd64-3.7/cmake-install-----------------------------------------------------------------
edit: Receiving the stream with ffplay from command line:
>ffplay.exe -i "rtmp://0.0.0.0:8000/live" -listen 1 -f flvffplay version 2024-02-04-git-7375a6ca7b-full_build-www.gyan.dev Copyright (c) 2003-2024 the FFmpeg developers built with gcc 12.2.0 (Rev10, Built by MSYS2 project) configuration: --enable-gpl --enable-version3 --enable-static --pkg-config=pkgconf --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24 --enable-libaribcaption --enable-libdav1d --enable-libdavs2 --enable-libuavs3d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libaom --enable-libjxl --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-dxva2 --enable-d3d11va --enable-libvpl --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libcodec2 --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint libavutil 58. 36.101 / 58. 36.101 libavcodec 60. 38.100 / 60. 38.100 libavformat 60. 20.100 / 60. 20.100 libavdevice 60. 4.100 / 60. 4.100 libavfilter 9. 17.100 / 9. 17.100 libswscale 7. 6.100 / 7. 6.100 libswresample 4. 13.100 / 4. 13.100 libpostproc 57. 4.100 / 57. 4.100[rtmp @ 0000018a564ed340] Unexpected stream , expecting livef=0/0 Last message repeated 1 timesInput #0, flv, from 'rtmp://0.0.0.0:8000/live':KB sq= 0B f=0/0 Metadata: fileSize : 0 audiochannels : 2 2.1 : false 3.1 : false 4.0 : false 4.1 : false 5.1 : false 7.1 : false encoder : obs-output module (libobs version 30.0.2) Duration: 00:00:00.00, start: 0.000000, bitrate: N/A Stream #0:0: Audio: aac (LC), 48000 Hz, stereo, fltp, 163 kb/s Stream #0:1: Video: h264 (Constrained Baseline), yuv420p(tv, bt709, progressive), 1280x720 [SAR 1:1 DAR 16:9], 2560 kb/s, 30 fps, 30 tbr, 1k tbn 7.54 A-V: -0.024 fd= 18 aq= 24KB vq= 498KB sq= 0B f=0/0