Open derekbrokeit opened 7 years ago
Just to add another data point. I tried this using a purely python implementation (examples\widgets\videoplayer.py
) and found the same results. Although, in this case, using the h264 stream actually crashed the program. On the bright side, an MJPEG stream plays after a few seconds.
Side Note: It is also somewhat surprising to see the additional widgets (stop/play, audio, loading) when running this from the python version without a kvlang implementation. Is there a reason for the difference between kvlang and python Video player implementations?
@derekbrokeit Please provide full logs of both implementations; also please provide full source code implementations. Thank you.
@derekbrokeit. The difference may be the using the 'Video' vs. 'VideoPlayer' widgets? As for the h264 issue, sorry, beyond my ken :-)
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
just tried to make an example of displaying an rtsp stream using gstplayer, and it indeed doesn't work.
from kivy.app import App
from kivy.lang import Builder
KV = '''
Video:
source: 'rtsp://freja.hiof.no:1935/rtplive/_definst_/hessdalen03.stream'
state: 'play'
'''
class StreamApp(App):
def build(self):
return Builder.load_string(KV)
if __name__ == '__main__':
StreamApp().run()
[INFO ] [Logger ] Record log in /home/gabriel/.kivy/logs/kivy_19-05-25_2.txt
[INFO ] [Kivy ] v1.11.0.dev0, git-0f39c0d, 20190508
[INFO ] [Kivy ] Installed at "/home/gabriel/dev/kivy/kivy/__init__.py"
[INFO ] [Python ] v3.6.3 (default, Oct 3 2017, 21:45:48)
[GCC 7.2.0]
[INFO ] [Python ] Interpreter at "/home/gabriel/.virtualenvs/kivy36/bin/python"
[INFO ] [Factory ] 184 symbols loaded
[DEBUG ] [Cache ] register <kv.lang> with limit=None, timeout=None
[DEBUG ] [Cache ] register <kv.image> with limit=None, timeout=60
[DEBUG ] [Cache ] register <kv.atlas> with limit=None, timeout=None
[INFO ] [ImageLoaderFFPy] Using ffpyplayer 4.0.1
[INFO ] [Image ] Providers: img_tex, img_dds, img_sdl2, img_pil, img_ffpyplayer, img_gif
[DEBUG ] [Cache ] register <kv.texture> with limit=1000, timeout=60
[DEBUG ] [Cache ] register <kv.shader> with limit=1000, timeout=3600
[DEBUG ] [App ] Loading kv <./stream.kv>
[DEBUG ] [App ] kv <./stream.kv> not found
[INFO ] [VideoGstplayer] Using Gstreamer 1.14.1.0
[INFO ] [Video ] Provider: gstplayer
[DEBUG ] [Window ] Ignored <egl_rpi> (import error)
[INFO ] [Window ] Provider: sdl2(['window_egl_rpi'] ignored)
[INFO ] [GL ] Using the "OpenGL" graphics system
[INFO ] [GL ] Backend used <sdl2>
[INFO ] [GL ] OpenGL version <b'3.0 Mesa 18.2.8'>
[INFO ] [GL ] OpenGL vendor <b'Intel Open Source Technology Center'>
[INFO ] [GL ] OpenGL renderer <b'Mesa DRI Intel(R) HD Graphics 620 (Kaby Lake GT2) '>
[INFO ] [GL ] OpenGL parsed version: 3, 0
[INFO ] [GL ] Shading version <b'1.30'>
[INFO ] [GL ] Texture max size <16384>
[INFO ] [GL ] Texture max units <32>
[DEBUG ] [Shader ] Fragment compiled successfully
[DEBUG ] [Shader ] Vertex compiled successfully
[DEBUG ] [ImageSDL2 ] Load </home/gabriel/dev/kivy/kivy/data/glsl/default.png>
[INFO ] [Window ] auto add sdl2 input provider
[INFO ] [Window ] virtual keyboard not allowed, single mode, not docked
[ERROR ] [Image ] Error reading file rtsp://freja.hiof.no:1935/rtplive/_definst_/hessdalen03.stream
[DEBUG ] [Base ] Create provider from mouse
[DEBUG ] [Base ] Create provider from probesysfs,match=LGDisplay
[DEBUG ] [ProbeSysfs ] using probesysfs!
[DEBUG ] [ProbeSysfs ] found device: SynPS/2 Synaptics TouchPad at /dev/input/event5
[DEBUG ] [ProbeSysfs ] found device: Melfas LGDisplay Incell Touch at /dev/input/event6
[INFO ] [ProbeSysfs ] device match: /dev/input/event6
[INFO ] [MTD ] Read event from </dev/input/event6>
[INFO ] [Base ] Start application main loop
[DEBUG ] [VideoGstplayer] Load <rtsp://freja.hiof.no:1935/rtplive/_definst_/hessdalen03.stream>
[INFO ] [MTD ] </dev/input/event6> range position X is 0 - 4095
[INFO ] [MTD ] </dev/input/event6> range position Y is 0 - 4095
[INFO ] [MTD ] </dev/input/event6> range touch major is 0 - 0
[INFO ] [MTD ] </dev/input/event6> range touch minor is 0 - 0
[INFO ] [MTD ] </dev/input/event6> range pressure is 0 - 255
[INFO ] [MTD ] </dev/input/event6> axes invertion: X is 0, Y is 0
[INFO ] [MTD ] </dev/input/event6> rotation set to 0
[ERROR ] [VideoGstplayer] b'Could not get/set settings from/on resource.'
[ERROR ] [VideoGstplayer] b'GStreamer error: state change failed and some element failed to post a proper error message with the reason for the failure.'
[ERROR ] [VideoGstplayer] b'Could not get/set settings from/on resource.'
[ERROR ] [VideoGstplayer] b'GStreamer error: state change failed and some element failed to post a proper error message with the reason for the failure.'
[WARNING] [VideoGstplayer] b'Could not read from resource.'
[INFO ] [WindowSDL ] exiting mainloop and closing.
[INFO ] [Base ] Leaving application in progress...
(the stream currently displays fine in vlc, though couldn't find the proper command to display it in gst-play yet)
edit: similar result with ffpyplayer
[INFO ] [MTD ] </dev/input/event6> axes invertion: X is 0, Y is 0
[INFO ] [MTD ] </dev/input/event6> rotation set to 0
[WARNING] [ffpyplayer ] [tcp @ 0x7f692c003760] Connection to tcp://freja.hiof.no:1935?timeout=0 failed (Connection refused), trying next address
[INFO ] [Base ] Leaving application in progress...
[INFO ] [WindowSDL ] exiting mainloop and closing.
Hi @tshirtman, I have a question. Can Kivy support VLC resource?
Hi, has there been any advance with this issue about playing rtsp streams in kivy via VideoGstplayer or any other component?
Tried to repro on Windows. Failed to find a public RTSP stream to test on! All the examples I found were long dead.
I am bringing this issue from stackoverflow because I found the issue-tracker.
I have a c++ program that uses
live555
in a winapi kernel event-loop that passes images from a camera tolibopenh264
and then served as an RTSP stream usingffmpeg
. The stream can be viewed fine usingVLC
. The event-loop also records to an avi container.I wanted to setup a remote-viewing client using
kivy
using the simple kvlang below:The window does not display a
Video
object, and the logging output has the following errorsWhen I change the stream encoding to MJPEG, the video player displays the live video without errors (except a single error under
Image
). Furthermore, when I changesource
to the file-path of the h264 encoded avi file that is recorded, it plays without errors. Is there a configuration that can alert theVideoGstplayer
of the expected encoding? Alternatively, is there a problem with my stream setup that the provided kivy player cannot read it properly? Perhaps I am missing a gstreamer dll, but the message does not alert me to anything such as that.I have a working version of
openh264
, so I am wondering if the gstreamer implementation (inside the wheel) needs to be compiled with additional libraries in order to use h264. Although, I am left wondering why it can play recorded h264 video and not a stream. Could this be a problem with gop-size?This was all performed on windows using the basic installation instructions for installing python-dependencies.
kivy
version being used is1.9.1
. Thank you for any help, I am new to kivy.