Metadata-Version: 2.1
Name: django-sage-streaming
Version: 0.1.1
Summary: video streaming based on Django
Home-page: https://github.com/sageteam-org/django-sage-streaming
Download-URL: https://github.com/sageteam-org/django-sage-streaming/archive/refs/tags/0.1.0.tar.gz
Author: Sage Team
Author-email: mail@sageteam.org
License: GNU
Keywords: django,python,streaming,video streaming
Classifier: Environment :: Web Environment
Classifier: Framework :: Django
Classifier: Framework :: Django :: 3.2
Classifier: Framework :: Django :: 3.1
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: GNU Affero General Public License v3
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
Requires-Python: >=3.5
License-File: LICENSE
License-File: AUTHORS.md
Requires-Dist: Django
Requires-Dist: djangorestframework

Django Sage Streaming
=====================

django-sage-streaming is a package based on Django Web Framework & Django Rest Framework for video streaming.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The Latest version of `django-sage-streaming <https://django-sage-streaming.readthedocs.io/>`__ documentation
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

|SageTeam| |PyPI release| |Supported Python versions| |Supported Django
versions| |Documentation| |Test|

-  `Project Detail <#project-detail>`__
-  `installation <#installation>`__
-  `Get Started <#getting-started>`__
-  `Admin <#admin>`__
-  `Settings <#settings>`__
-  `Front-End implementation <#frontend>`__

Project Detail
--------------

You can find all technologies we used in our project into these files:
\* Version: 1.0.0 \* Frameworks: - Django 3.2.5 \* Libraries: - Django
rest framework 3.12.4 \* Language: Python 3.9.4

Installation
------------

First install package

.. code:: shell

    $ pip install django-sage-streaming

Then add ``sage_stream`` to INSTALLED\_APPS in settings.py

.. code:: python

    INSTALLED_APPS = [
      ...
      'sage_stream',
      ...
    ]

Also make sure you have ``rest_framework`` in INSTALLED\_APPS

.. code:: python

    INSTALLED_APPS = [
      ...
      'rest_framework',
      ...
    ]

Getting Started
---------------

``django-sage-streaming`` provides two ways that you can stream videos
over HTTP: 1. built-in API View: for using built-in view add
``sage_stream.api.urls`` to urls.py

.. code:: python

    from django.urls import path, include
    urlpatterns = [
      ...
      path('api/', include('sage_stream.api.urls')),
      ...
    ]

Now you can access the stream api here:
``localhost:8000/api/stream?path=<you_video_path>``

`The settings of built-in view is available here <#settings>`__

2. create custom views: you can use stream functions in your application

.. code:: python

    from sage_stream.utils.stream_services import get_streaming_response

    response = get_streaming_response(
        path=video_path, # path to video
        range_header=range_header, # range header extracted from request
        range_re=range_re, # range header regex pattern (default is available in sage_stream.settings.STREAM_RANGE_HEADER_REGEX_PATTERN)
        max_load_volume=max_load_volume,  # the maximum volume of the response body
    )

Other functions you can use

.. code:: python

    from sage_stream.utils.file_services import file_iterator  # iterates in given file chunk by chunk in generator mode
    from sage_stream.utils.log_services import log_watch_request  # creates WatchLog instance with given data

    # usage examples

    # log
    log_watch_request(video_path, request.user.is_authenticated, ip, request.user)

    # file iterator
    resp = StreamingHttpResponse(
        file_iterator(
            path,
            offset=first_byte,
            length=length
        ),
        status=206,
        content_type=content_type
    )

Admin
-----

``django-sage-streaming`` also has logging system for watching requests

It is available in admin panel when you add ``sage_stream`` to
INSTALLED\_APPS

Settings
--------

Here are the parameters that you can set from setting:

+------------------------------------------+---------------------------------------------------------------------------+
| Parameter                                | Description                                                               |
+==========================================+===========================================================================+
| STREAM\_DEFAULT\_PERMISSION\_CLASSES     | permission\_classes that used in built-in APIView. default: (AllowAny,)   |
+------------------------------------------+---------------------------------------------------------------------------+
| STREAM\_DEFAULT\_VIDEO\_PATH\_URL\_VAR   | url path variable key. default: path                                      |
+------------------------------------------+---------------------------------------------------------------------------+
| STREAM\_MAX\_LOAD\_VOLUME                | maximum load video in each chunk(by MB). default: 8                       |
+------------------------------------------+---------------------------------------------------------------------------+
| STREAM\_WATCH\_LOG\_ENABLED              | is log watch requests enabled. default: True                              |
+------------------------------------------+---------------------------------------------------------------------------+
| STREAM\_RANGE\_HEADER\_REGEX\_PATTERN    | range header regex pattern. default: r'bytes=(+)-()'                      |
+------------------------------------------+---------------------------------------------------------------------------+

Frontend
--------

Frontend implementation is so easy

you just need to add stream url as ``src`` in ``video`` tag

.. code:: html

    <video width="480" controls>
        <source src="http://localhost:8000/api/stream/?path=<path_to_video>" type="video/mp4">
    </video>


Team
----

+-----------------------------------------------------------------+---------------------------------------------------------+
| |sepehr|                                                        |                            |mehran|                     |
+=================================================================+=========================================================+
| `Sepehr Akbarazadeh <https://github.com/sepehr-akbarzadeh>`__   | `Mehran Rahmanzadeh <https://github.com/mrhnz>`__       |
+-----------------------------------------------------------------+---------------------------------------------------------+

.. |SageTeam| image:: https://github.com/sageteam-org/django-sage-painless/blob/develop/docs/images/tag_sage.png?raw=true
            :alt: SageTeam
.. |PyPI release| image:: https://github.com/sageteam-org/django-sage-painless/blob/develop/docs/images/tag_pypi_0.0.8.png?raw=true
            :alt: django-sage-painless
.. |Supported Python versions| image:: https://github.com/sageteam-org/django-sage-painless/blob/develop/docs/images/tag_python-02.png?raw=true
            :alt: django-sage-painless
.. |Supported Django versions| image:: https://github.com/sageteam-org/django-sage-painless/blob/develop/docs/images/tag_django.png?raw=true
            :alt: django-sage-painless
.. |Documentation| image:: https://github.com/sageteam-org/django-sage-painless/blob/develop/docs/images/tag_docs.png?raw=true
            :alt: django-sage-painless
.. |Test| image:: https://github.com/sageteam-org/django-sage-painless/blob/develop/docs/images/tag_test.png?raw=true
            :alt: django-sage-painless
.. |sepehr| image:: https://github.com/sageteam-org/django-sage-painless/blob/develop/docs/images/sepehr.jpeg?raw=true
            :height: 230px
            :width: 230px
            :alt: Sepehr Akbarzadeh
.. |mehran| image:: https://github.com/sageteam-org/django-sage-painless/blob/develop/docs/images/mehran.png?raw=true
            :height: 340px
            :width: 225px
            :alt: Mehran Rahmanzadeh
