File: README.rst

package info (click to toggle)
python-librtmp 0.3.0-1
  • links: PTS, VCS
  • area: main
  • in suites: buster, stretch
  • size: 260 kB
  • ctags: 295
  • sloc: ansic: 1,255; python: 858; makefile: 9
file content (137 lines) | stat: -rw-r--r-- 3,524 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
python-librtmp
==============

.. image:: http://img.shields.io/pypi/v/python-librtmp.svg?style=flat-square
    :target: https://pypi.python.org/pypi/python-librtmp

.. image:: http://img.shields.io/pypi/dm/python-librtmp.svg?style=flat-square
    :target: https://pypi.python.org/pypi/python-librtmp

.. image:: http://img.shields.io/travis/chrippa/python-librtmp.svg?style=flat-square
    :target: http://travis-ci.org/chrippa/python-librtmp


python-librtmp is a `RTMP`_ client library. It uses the implementation
provided by `librtmp`_ via `cffi`_.

* Free software: `BSD license`_
* Documentation: http://pythonhosted.org/python-librtmp


.. _RTMP: http://en.wikipedia.org/wiki/Real_Time_Messaging_Protocol
.. _cffi: http://cffi.readthedocs.org/
.. _librtmp: http://rtmpdump.mplayerhq.hu/librtmp.3.html
.. _BSD license: http://opensource.org/licenses/BSD-2-Clause


Installation
============

The latest stable version is available to install using `pip`_

.. code-block:: console

    sudo pip install python-librtmp

But you can also get the development version using `Git <http://git-scm.com/>`_:

.. code-block:: console

    git clone git://github.com/chrippa/python-librtmp.git
    cd python-librtmp
    sudo python setup.py install


.. _pip: http://pip-installer.org/
.. _git: http://git-scm.com/


Dependencies
------------

- `Python`_, at least version 2.6 or 3.3.
- a C compiler capapable of building `Python`_ extensions, e.g. `gcc`_
- `librtmp`_: The library including its headers (`librtmp-dev` or equivalent)
- `cffi`_: cffi depends on libffi and its headers (`libffi-dev` or equivalent)
- On Python <3.4 the backport of `singledispatch`_ is also required.

.. _gcc: https://gcc.gnu.org/
.. _python: http://python.org/
.. _singledispatch: https://pypi.python.org/pypi/singledispatch


Windows
-------

python-librtmp (and `cffi`_) has wheel packages (binaries) available on PyPi and can
therefore be easily installed with `pip 1.4+ <http://www.pip-installer.org/>`_
without the need to compile anything:

.. code-block:: console

    > pip install python-librtmp

    (on older pip versions you need to use --use-wheel)
    > pip install --use-wheel python-librtmp


Features
========

Streaming
---------

The most common use case of RTMP is to read a video stream from
a server.

.. code-block:: python

    import librtmp

    # Create a connection
    conn = librtmp.RTMP("rtmp://your.server.net/app/playpath", live=True)
    # Attempt to connect
    conn.connect()
    # Get a file-like object to access to the stream
    stream = conn.create_stream()
    # Read 1024 bytes of data
    data = stream.read(1024)


Remote function calls
---------------------

Here is a example of creating a Python function that can be used to call
remote functions:

.. code-block:: python

    my_remote_method = conn.remote_method("MyRemoteMethod", block=True)
    result = my_remote_method("some argument")

Waiting for the server to call our function:

.. code-block:: python

    # This will automatically name the function after it's Python name
    @conn.invoke_handler
    def my_add(a, b):
        return a + b

    # Start waiting for calls
    conn.process_packets()

You can also use custom function name instead:

.. code-block:: python

    @conn.invoke_handler("MyMath.MyAdd")

Instead of blocking forever when waiting for a call you can specify to wait
only for a specific invoke and then stop blocking:

.. code-block:: python

    conn.process_packets(invoked_method="MyMath.MyAdd", timeout=30)