Informations sur le systèmecv :: cudacodec :: VideoReader incapable de lire le flux RTSP
- OpenCV => 3.3.0
- Système d'exploitation/Plate-forme => Ubuntu 16.04, x86_64
- compilateur => gcc version 5.4.1 20160904
- Cuda => 8,0
- carte Nvidia => GTX 1080 Ti
- détails ffmpeg
- libavutil 55. 74,100/55. 74,100
- libavcodec 57.103.100/57.103.100
- libavformat 57. 77,100/57. 77,100
- libavdevice 57. 7,101/57. 7,101
- libavfilter 6.100.100/6.100.100
- libswscale 4. 7,103/4. 7,103
- libswresample 2. 8,100/2. 8,100
Description détaillée
je suis en train de lire un flux RTSP utilisant cudacodec::VideoReader
ce flux joue bien dans vlc et cv::VideoCapture
mais quand j'essaie de jouer dans cudacodec::VideoReader
je reçois une erreur dire:
OpenCV Error: Gpu API call (CUDA_ERROR_FILE_NOT_FOUND [Code = 301]) in CuvidVideoSource, file /home/deep/Development/libraries/opencv/opencv/modules/cudacodec/src/cuvid_video_source.cpp, line 66
OpenCV Error: Assertion failed (init_MediaStream_FFMPEG()) in FFmpegVideoSource, file /home/deep/Development/libraries/opencv/opencv/modules/cudacodec/src/ffmpeg_video_source.cpp, line 101
Étapes pour reproduire
#include <iostream>
#include "opencv2/opencv_modules.hpp"
#if defined(HAVE_OPENCV_CUDACODEC)
#include <opencv2/core.hpp>
#include <opencv2/cudacodec.hpp>
#include <opencv2/highgui.hpp>
int main(int argc, const char* argv[])
{
const std::string fname = "rtsp://admin:[email protected]/media/video2";
cv::namedWindow("GPU", cv::WINDOW_NORMAL);
cv::cuda::GpuMat d_frame;
cv::Ptr<cv::cudacodec::VideoReader> d_reader = cv::cudacodec::createVideoReader(fname);
for (;;)
{
if (!d_reader->nextFrame(d_frame))
break;
cv::Mat frame;
d_frame.download(frame);
cv::imshow("GPU", frame);
if (cv::waitKey(3) > 0)
break;
}
return 0;
}
#else
int main()
{
std::cout << "OpenCV was built without CUDA Video decoding support\n" << std::endl;
return 0;
}
#endif
J'ai essayé de débogage à l'aide de GDB et a vu que, dans ffmpeg_video_source.cpp
bool init_MediaStream_FFMPEG()
retourne directement sans vérifier si la condition.
sortie GDB
cv::cudacodec::detail::FFmpegVideoSource::FFmpegVideoSource
(this=0x402a20 <_start>, fname=...) at /home/deep/Development/libraries/opencv/opencv/modules/cudacodec/src/ffmpeg_video_source.cpp:98
98 cv::cudacodec::detail::FFmpegVideoSource::FFmpegVideoSource(const String& fname) :
(gdb) n
99 stream_(0)
(gdb) n
101 CV_Assert(init_MediaStream_FFMPEG());
(gdb) s
(anonymous namespace)::init_MediaStream_FFMPEG() at /home/deep/Development/libraries/opencv/opencv/modules/cudacodec/src/ffmpeg_video_source.cpp:94
94 return initialized;
(gdb) display initialized
4: initialized = false
(gdb) s
95 }
MISE À JOUR:
J'ai résolu le problème. solution link
Un lien vers une solution est le bienvenu, mais s'il vous plaît assurez-vous que votre réponse est utile sans cela: [ajouter un contexte autour du lien] (// meta.stackexchange.com/a/8259) pour que vos autres utilisateurs aient une idée de ce que c'est et pourquoi c'est là, puis citez la partie la plus pertinente de la page que vous liez au cas où la page cible n'est pas disponible. [Réponses qui sont un peu plus d'un lien peut être supprimé.] (// stackoverflow.com/help/deleted-answers) – geisterfurz007
@Andre oui je l'ai résolu. Le post que vous avez lié est en fait le mien, j'ai oublié de mettre à jour la solution ici sur stackoverflow. – Pawan