Я создал поток mjpeg. У меня есть длина содержимого между двумя кадрами в формате JPEG [между нижним колонтитулом первого кадра и заголовком следующего кадра].
[MJPEG STREAM]
|
V
...
----------
JPEG FRAME
(Image)
----------
Content-length
(Text)
----------
JPEG FRAME
(Image)
----------
Content-length
(Text)
----------
JPEG FRAME
(Image)
----------
...
|
V
Я могу воспроизвести видео с помощью gstreamer-java, gstreamer C API и gst-launch. Однако я пытаюсь разобрать текст длины содержимого в gstreamer-java. Я пробовал "метатеги" , но это не дает нужного мне результата
Я играю поток mjpeg, который я создал следующим образом
gst-launch -v souphttpsrc location="<ip>:<port>/<cgi_bin folder>/<name>.cgi" do-timestamp=true is_live=true ! multipartdemux ! jpegdec ! ffmpegcolorspace ! autovideosink
Я пробовал метатеги, используя
gst-launch -v souphttpsrc location="<ip>:<port>/<cgi_bin folder>/<name>.cgi" do-timestamp=true is_live=true ! multipartdemux ! jpegdec ! fakesink -t
и это
gst-launch -v souphttpsrc location="<ip>:<port>/<cgi_bin folder>/<name>.cgi" do-timestamp=true is_live=true ! fakesink -t
Однако вывод этого медиа-конвейера выглядит примерно так:
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = "chain ******* < (557568
bytes, timestamp: 0:00:06.895505695, duration: none, offset: -1, offset_end: -1, flags:
0) 0x9a82818"
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = "chain ******* < (557568
bytes, timestamp: 0:00:06.941328354, duration: none, offset: -1, offset_end: -1, flags:
0) 0x9a6f6e0"
Как видно, нет контента-длины. :(. Я использую WireShark и вижу пакеты данных, содержащие контент-длину. Впоследствии я написал отдельный код Java (без плагинов gstreamer), и я могу проанализировать поток, чтобы получить длину контента. Однако это не идеальный метод, как я хочу длина содержимого соответствует точному кадру с учетом синхронизации.
Я написал тройники ранее для кода C API. Мне интересно, будет ли тройник работать в этом случае!