LINUX.ORG.RU

Проблема с потоковым воспроизведением в QMediaPlayer

 ,


0

2

Добрый день. Имеется приложение на Qt, которому стримят на udp порт видео следующего формата:

General
Complete name                            : cam7.avi
Format                                   : AVI
Format/Info                              : Audio Video Interleave
File size                                : 767 MiB
Duration                                 : 12 min 0 s
Overall bit rate                         : 8 927 kb/s
Writing application                      : MEncoder Redxii-SVN-r37313-4.8.3
Writing library                          : MPlayer

Video
ID                                       : 0
Format                                   : JPEG
Codec ID                                 : IJPG
Codec ID/Hint                            : Intergraph
Duration                                 : 12 min 0 s
Bit rate                                 : 8 922 kb/s
Width                                    : 1 280 pixels
Height                                   : 720 pixels
Display aspect ratio                     : 16:9
Frame rate                               : 25.000 FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Compression mode                         : Lossy
Bits/(Pixel*Frame)                       : 0.387
Stream size                              : 766 MiB (100%)

Стоит задача отображать его в osgEarth. Начать я решил с получения очередного кадра посредством QAbstractVideoSurface, накидал небольшой тест: https://github.com/popov-aa/MJpegStream.git

Параметр запуска –input определяет источник воспроизведения: file - посредством установки setMedia «file://», stream - устанавливает конвейер gstreamer, содержащий udpsrc:

gst-pipeline: udpsrc port=20101 ! application/x-rtp,encoding-name=JPEG,payload=26 ! rtpjpegdepay ! jpegdec ! xvimagesink name=qtvideosink

Параметр запуска –output определяет куда будет выводится видео: widget - в QVideoWidget, surface - в QLabel посредством QAbstractVideoSurface.

Результаты следующие (параметры запуска):

–input file –output widget Отображение в QVideoWidget корректное, дополнительных окон нет

–input file –output surface Отображение в Surface widget корректное, дополнительных окон нет

Это говорит о том, что с кодеками в системе все хорошо, MyVideoSurface корректно извлекает каждый кадр.

–input stream –output widget QVideoWidget - черный, отображение видео в другом окне

–input stream –output surface Surface widget - пустой, отображение видео в другом окне

А вот распознание потока уже хромает. Воспроизведение потока запускаю следующим способом:

gst-launch-1.0 -v filesrc location=cam7.avi ! avidemux ! rtpjpegpay ! udpsink host=127.0.0.1 port=20101

Оригинальное видео, на котором я тестирую, к сожалению не могу залить. Заменил его бажным сгенерированным куском, но поведение теста от этого не изменилось.

Подозреваю, что проблема в конвейере gstreamer, но пока не понял где. Однако при этом поток воспроизводится в отдельном окне, то есть все успешно декодируется. Прошу помощи у сообщества. Залитый на github тест самодостаточный, содержит примерное видео.

Проблема даже не с потоком. Если URL в setMedia заменить на gst-pipeline: videotestsrc ! xvimagesink name=qtvideosink, то телевизор рисуется так же в отдельном окне, как с виджетом, так и с surface.

popov-aa ()

мб так?

gst-pipeline: udpsrc port=20101 ! application/x-rtp,encoding-name=JPEG,payload=26 ! rtpjpegdepay ! jpegdec ! qtvideosink

unC0Rr ★★★★★ ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.