Захватите фрейм из gst pipe в opencv с помощью python

Я использую OpenCV и GStreamer 0.10.

Я использую этот конвейер для получения пакетов MPEG TS через UDP с пользовательским сокетом sockfd предоставленный Python и отобразить его с xvimagesinkи работает отлично. Следующая строка для этого конвейера:

PIPELINE_DEF = "udpsrc do-timestamp=true name=src blocksize=1316 closefd=false buffer-size=5600 !" \
           "mpegtsdemux !" \
           "queue !" \
           "ffdec_h264 max-threads=0 !" \
           "ffmpegcolorspace !" \
           "xvimagesink name=video"

Теперь я хочу получить один кадр из этого конвейера и отобразить его с помощью OpenCV. Как мне это сделать? Я много знаю о получении данных из буфера от appsink. Но я до сих пор не знаю, как преобразовать эти буфера в каждый кадр для OpenCV. Спасибо за ответ и любую помощь:]

1 ответ

Решение

Спасибо, я пытался использовать rtph264pay для трансляции видео в реальном времени на udpsink. Следующая строка похвалы для gst pipe:

PIPELINE_DEF = 
"udpsrc name=src !" \               
"mpegtsdemux !" \       
"queue !" \               
"h264parse !" \ 
"rtph264pay !" \   
"udpsink host=127.0.0.1 port=5000"  

И я создал файл sdp, чтобы его можно было получить с помощью opencv видеосъемки ("123.sdp") 123.sdp, для этого файла sdp указано следующее содержимое:

c=IN IP4 127.0.0.1 
m=video 5000 RTP/AVP 96 
a=rtpmap:96 H264/90000 

Теперь это работало хорошо, просто нужно удалить "blocksize=1316 closefd=false buffer-size=5600", чтобы снять ограничение.

Другие вопросы по тегам