gstreamer-python's People
Forkers
jkmenon-ign vitaliivovk zerocurve edumotya shahargigi yucefsourani karasu9123 aburgool tonykuo222 ag-python yossioo yuyou tanakafer arronmabrey sam-37 ivost eugene-wang sofokliskat anhhc ucekmez jimfleming mexxik bao150297 shithead fomorians-infra corner4world fzoric8 subodh-malgonde diegodgs alexdavydov357 nrser bug-developer021 leefrank9527 cakai aaron-nall bonsairobotics gst-collections muzammil360 andyhuska matthew-rococo johnnewto sihabsahariar aletheia-ai mbicl javohirjalilov shawnhanxiaogstreamer-python's Issues
OSError: dlopen(libgstreamer-1.0.so.0, 6): image not found
gst_hack.py
was throwing this error, when running on a mac:
---------------------------------------------------------------------------
OSError Traceback (most recent call last)
~/Documents/mythic-projects/OKR_2019Q2/gstreamer_tutorials/test_gst_pipeline.py in <module>
6 import os
7 import logging
----> 8 from pygst_utils import utils
9 logging.basicConfig(level=logging.DEBUG)
10
~/Documents/mythic-projects/OKR_2019Q2/venv/lib/python3.6/site-packages/pygst_utils/__init__.py in <module>
4 from gi.repository import Gst, GstBase, GObject, GLib
5
----> 6 from .gst_hacks import map_gst_buffer, get_buffer_size
7 from .gst_hacks import map_gst_memory
8
~/Documents/mythic-projects/OKR_2019Q2/venv/lib/python3.6/site-packages/pygst_utils/gst_hacks.py in <module>
25 _GST_MAP_INFO_POINTER = POINTER(_GstMapInfo)
26
---> 27 _libgst = CDLL("libgstreamer-1.0.so.0")
28 _libgst.gst_buffer_map.argtypes = [c_void_p, _GST_MAP_INFO_POINTER, c_int]
29 _libgst.gst_buffer_map.restype = c_int
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ctypes/__init__.py in __init__(self, name, mode, handle, use_errno, use_last_error)
346
347 if handle is None:
--> 348 self._handle = _dlopen(self._name, mode)
349 else:
350 self._handle = handle
OSError: dlopen(libgstreamer-1.0.so.0, 6): image not found
I was able to get around it by setting https://github.com/jackersson/pygst-utils/blob/master/pygst_utils/gst_hacks.py#L27 to the .dylib
path
for my machine, it was this:
libgst = CDLL("/usr/local/lib/libgstreamer-1.0.dylib")
Writable array requested but buffer is not writeable
I am trying to draw some shapes on the video stream using PyCairo:
with map_gst_buffer(buffer, Gst.MapFlags.READ | Gst.MapFlags.WRITE) as mapped:
# code to draw shapes
However I get an error:
Writable array requested but buffer is not writeable
This error is raised in the map_gst_buffer
function in gst_hacks.py
if flags & Gst.MapFlags.WRITE and _libgst.gst_mini_object_is_writable(ptr) == 0:
raise ValueError(
"Writable array requested but buffer is not writeable")
What am I missing here?
Readme question
Readme includes sections “install OS packages”, “in-place”, “pip-package” under the section Install. Are all 3 of those steps needed to use the pip package?
Internal streaming error during appsrc example
Hey,
thanks for this great work. I want to use it in an app to push frames to a pipeline after some computer vision magic. However, when running the appsrc example, I encounter the following error:
bob@nano5:~/gstreamer-python$ PYTHONPATH=. python examples/run_appsrc.py -p "appsrc emit-signals=True is-live=True caps=video/x-raw,format=RGB,width=640,height=480 ! queue ! videoconvert ! autovideosink" -n 1000
INFO | pygst.GstPipeline | 13.08 12:22:31.595 | MainThread | GstPipeline
gst-launch-1.0 appsrc emit-signals=True is-live=True caps=video/x-raw,format=RGB,width=640,height=480 ! queue ! videoconvert ! autovideosink
INFO | pygst.GstPipeline | 13.08 12:22:31.672 | MainThread | Starting GstPipeline
DEBUG | pygst.GstPipeline | 13.08 12:22:31.674 | MainThread | GstPipeline Setting pipeline state to PLAYING ...
DEBUG | pygst.GstPipeline | 13.08 12:22:31.675 | MainThread | GstPipeline Pipeline state set to PLAYING
ERROR | pygst.GstPipeline | 13.08 12:22:31.695 | Thread-1 | Gstreamer.GstPipeline: Error gst-stream-error-quark:
Internal data stream error. (1): gstbasesrc.c(3055): gst_base_src_loop (): /GstPipeline:pipeline0/GstAppSrc:appsrc0:
streaming stopped, reason not-negotiated (-4).
DEBUG | pygst.GstPipeline | 13.08 12:22:31.696 | Thread-1 | GstPipeline Stopping pipeline ...
DEBUG | pygst.GstPipeline | 13.08 12:22:31.697 | Thread-1 | GstPipeline Reseting pipeline state ....
DEBUG | pygst.GstPipeline | 13.08 12:22:31.698 | Thread-1 | GstPipeline Gst.Pipeline successfully destroyed
INFO | pygst.GstPipeline | 13.08 12:22:38.935 | MainThread | GstPipeline Shutdown requested ...
INFO | pygst.GstPipeline | 13.08 12:22:38.935 | MainThread | GstPipeline successfully destroyed
DEBUG | pygst.GstContext | 13.08 12:22:38.935 | MainThread | GstContext Quitting main loop ...
DEBUG | pygst.GstContext | 13.08 12:22:38.937 | MainThread | GstContext Joining main loop thread...
platform: Jetson nano with jetpack 4.5.1
python: 3.6.9
gstreamer: 1.14.5
Any idea what might be the reason?
Cheers
[Question] Change the buffer size
As per README, you can modify the buffer as
with map_gst_buffer(buffer, Gst.MapFlags.READ | Gst.MapFlags.WRITE) as mapped:
My question is: what if I want to increase the buffer size by appending some bytes from Python?
Is it possible? If so, how to convert Python bytearray to C byte array, using Ctypes?
Thanks.
Best Regards,
Yu
PYGOBJECT version mismatch
Was following the README.md file and got this error when running the "build-gst-python.sh" script:
checking for GST... yes
checking for PYGOBJECT... configure: error: Package requirements (pygobject-3.0 >= 3.8) were not met:
No package 'pygobject-3.0' found
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Alternatively, you may set the environment variables PYGOBJECT_CFLAGS
and PYGOBJECT_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
make: *** No targets specified and no makefile found. Stop.
make: Nothing to be done for 'install'.
Any tips on how to fix this?
Metadata class_name field overwritten
Using the gst_objects_info_meta library and Python bindings, it seems that the class_name field is getting overwritten/corrupted. For instance, I've got detector and annotator elements, where the former is generating the bounding boxes, and the latter is drawing them on the frame. Printing things out while the pipeline runs, I get something like b'\x01' as the class label. I assume this has something to do with memory not being allocated correctly for that field but am not sure how to fix it.
Build fails, legacy-install-failure
I may be using too recent of dependencies. Using Python 3.8 on Ubuntu 20.
Attempted the following command: pip install . -v --install-option "build_py" --install-option "--skip-gst-python"
Resulted in the following:
× Running setup.py install for toml did not run successfully.
│ exit code: 1
╰─> See above for output.
note: This error originates from a subprocess, and is likely not a problem with pip.
full command: /usr/bin/python3 -u -c '
exec(compile('"'"''"'"''"'"'
# This is <pip-setuptools-caller> -- a caller that pip uses to run setup.py
#
# - It imports setuptools before invoking setup.py, to enable projects that directly
# import from `distutils.core` to work with newer packaging standards.
# - It provides a clear error message when setuptools is not installed.
# - It sets `sys.argv[0]` to the underlying `setup.py`, when invoking `setup.py` so
# setuptools doesn'"'"'t think the script is `-c`. This avoids the following warning:
# manifest_maker: standard file '"'"'-c'"'"' not found".
# - It generates a shim setup.py, for handling setup.cfg-only projects.
import os, sys, tokenize
try:
import setuptools
except ImportError as error:
print(
"ERROR: Can not execute `setup.py` since setuptools is not available in "
"the build environment.",
file=sys.stderr,
)
sys.exit(1)
__file__ = %r
sys.argv[0] = __file__
if os.path.exists(__file__):
filename = __file__
with tokenize.open(__file__) as f:
setup_py_code = f.read()
else:
filename = "<auto-generated setuptools caller>"
setup_py_code = "from setuptools import setup; setup()"
exec(compile(setup_py_code, filename, "exec"))
'"'"''"'"''"'"' % ('"'"'/tmp/pip-install-oy1_0t_m/toml_ea05c2edf01f452b96ccba24abf9cd53/setup.py'"'"',), "<pip-setuptools-caller>", "exec"))' install --record /tmp/pip-record-xphty8gv/install-record.txt --single-version-externally-managed --user --prefix= --compile --install-headers /home/colin/.local/include/python3.8/toml build_py --skip-gst-python
cwd: /tmp/pip-install-oy1_0t_m/toml_ea05c2edf01f452b96ccba24abf9cd53/
Running setup.py install for toml ... error
error: legacy-install-failure
× Encountered error while trying to install package.
╰─> toml
note: This is an issue with the package mentioned above, not pip.
hint: See above for output from the failure.
GStreamer seems to have moved from autogen to meson...
.... which breaks this script. I'll see if I can get it working 'by hand' and make a pull request if I get it working.
Installing in Dockerfile breaks Deepstream installation
I am installing this package using pip within a Dockerfile build:
RUN pip3 install git+https://github.com/jackersson/gstreamer-python.git#egg=gstreamer-python
The base image I am using is the Deepstream image nvcr.io/nvidia/deepstream:6.0.1-devel
. If I do this, when I run the container, Deepstream plugins can't be found anymore (e.g. get-inspect-1.0 nvinfer
can't find nvinfer
). However, if I install this very library (in the same way) within the container (vs during the docker build) I have no issues and everything works fine: Deepstream plugins can be found.
Any hint on what could be causing this issue?
Recommended way to handle KeyboardInterrupt (ctrl-c) properly in apps
Hi
(sorry this may not be an issue but a question)
I have made a test Python app that use the GstContext
. As GstContext
runs inside a thread and I could not find a way to "terminate" it properly. The main thread could not catch the KeyboardInterrupt
(even I have tried the signal
).
Is there a way to handle KeyboardInterrupt
at the main thread (app) and shutdown pipeline gracefully?
Thanks.
Yu
gstreamer-python/gstreamer/gst_tools.py
Line 98 in 7773164
dynamically adding a pipline
Hi,
I'm trying to understand how to dynamically add a pipeline to existing one. I see in
the usage of factory.is an example of a dynamic factory. Is there an easy way to apply GstPipeline to a dynamic allocated instance?
Kind regards,
Martijn
Install option --skip-gst-python fails
I just tried to install gstreamer-python while skipping gst-python and installation failed.
Error logs:
gstreamer-python-install-error.txt
Steps to reproduce:
git clone git+https://github.com/jackersson/gstreamer-python.git
cd gstreamer-python
pip3 --user install . -v --install-option "build_py" --install-option "--skip-gst-python"
I would be grateful for any pointers to fix this!
Project license
Hi
This is a very good Python module/utility classes on top of the low-level module "py-gst
".
It seems that this repo does not have any license defined.
libgst_objects_info_meta.so: cannot open shared object file: No such file or directory
After executed the installation part, I tried to import from pygst_utils.gst_objects_info_meta import gst_meta_write
and got an error:
>>> from pygst_utils.gst_objects_info_meta import gst_meta_write
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.6/dist-packages/pygst_utils/gst_objects_info_meta.py", line 27, in <module>
libc = CDLL(os.path.join(cwd, "3rd_party/gstreamer/build/libgst_objects_info_meta.so"))
File "/usr/lib/python3.6/ctypes/__init__.py", line 348, in __init__
self._handle = _dlopen(self._name, mode)
OSError: /usr/local/lib/python3.6/dist-packages/pygst_utils/3rd_party/gstreamer/build/libgst_objects_info_meta.so: cannot open shared object file: No such file or directory
Any ideas on how to solve it?
run_rtsp example throw: TypeError: 'Iterator' object is not iterable
Throw an Error TypeError: 'Iterator' object is not iterable in example run_rtsp.py.
gstreamer-python/examples/run_rtsp.py
Line 162 in c8d4e04
Log:
Traceback (most recent call last):
File "rtsp-server.py", line 212, in do_configure
appsrcs = get_child_by_cls(rtsp_media.get_element(), GstApp.AppSrc)
File "rtsp-server.py", line 162, in get_child_by_cls
return [e for e in element.iterate_elements() if isinstance(e, cls)]
TypeError: 'Iterator' object is not iterable
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.