Skip to main content

Simple, flexible and efficient MJPEG video streamer for Python

Project description

mjpeg-streamer

Overview

The mjpeg-streamer package provides a simple, flexible and efficient way to stream MJPEG video from OpenCV-compatible sources over HTTP. It provides a flexible interface that allows users to specify the video source and configure various parameters such as image size, quality, and FPS.

Installation

You can install the package via pip:

pip install mjpeg-streamer

Usage

Here's a simple example that shows how to use the MJPEG Server package to stream video from a webcam:

import cv2
from mjpeg_streamer import MjpegServer, Stream

cap = cv2.VideoCapture(0)

stream = Stream("my_camera", size=(640, 480), quality=50, fps=30)

server = MjpegServer("localhost", 8080)
server.add_stream(stream)
server.start()

while True:
    _, frame = cap.read()
    cv2.imshow(stream.name, frame)
    if cv2.waitKey(1) == ord("q"):
        break

    stream.set_frame(frame)

server.stop()
cap.release()
cv2.destroyAllWindows()

This example starts the MJPEG server on localhost:8080 and streams video from the webcam with the index of 0. The video is resized to 640x480 pixels, compressed with JPEG quality of 50, and streamed at 30 FPS.

To view the video stream, you can open a web browser and navigate to http://localhost:8080/my_camera.

Don't forget to check out the tests directory for more examples.

Class Reference

Stream

A class that represents a single video stream. A stream consists of a sequence of frames that can be set and retrieved using the set_frame and get_frame methods.

Constructor:

Stream(name: str, size: Optional[Tuple[int, int]] = None, quality: int = 50, fps: int = 24)

Creates a new Stream instance with the given unique name, image size, JPEG quality (1-100), and FPS.

Methods:

  • set_frame

    set_frame(frame: np.ndarray)
    

    Sets the current frame to the given Numpy array (OpenCV frame).


  • get_bandwidth

    get_bandwidth()
    

    Returns the bandwidth of the stream in bytes per second.


  • get_frame

    get_frame()
    

    Returns the current frame as a Numpy array.

MjpegServer

A class that represents an MJPEG server. The server can serve multiple video streams, each identified by a unique name.

Constructor:

MjpegServer(host: str = "localhost", port: int = 8080)

Creates a new MjpegServer instance with the given host and port.

Methods:

  • add_stream

    add_stream(stream: Stream)
    

    Adds a new video stream to the server.


  • start

    start()
    

    Starts the server in a separate thread.


  • stop

    stop()
    

    Stops the server.

Contributing

Contributions are welcome! Please open an issue or submit a pull request.

License

This project is licensed under the AGPL-3.0 License - see the LICENSE file for details.

TL;DR: You can use, modify, and distribute this software for free or for profit, but you must make the source code available to your users and include a copy of this license in your project. This license should also mention the original author and a link to this repository.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mjpeg_streamer-2023.12.25.post0.tar.gz (16.9 kB view details)

Uploaded Source

Built Distribution

mjpeg_streamer-2023.12.25.post0-py3-none-any.whl (17.0 kB view details)

Uploaded Python 3

File details

Details for the file mjpeg_streamer-2023.12.25.post0.tar.gz.

File metadata

File hashes

Hashes for mjpeg_streamer-2023.12.25.post0.tar.gz
Algorithm Hash digest
SHA256 db9922bbad84a34e746191b04b902320c7aedb12b406317f7b6da7f3bec6a4c4
MD5 0ef96425db0abb577edb778184ce55cd
BLAKE2b-256 b9d91ef7ee6a77f9eda93a65230cb8c61b0dcb418a6e3b635c24d55fa144713e

See more details on using hashes here.

File details

Details for the file mjpeg_streamer-2023.12.25.post0-py3-none-any.whl.

File metadata

File hashes

Hashes for mjpeg_streamer-2023.12.25.post0-py3-none-any.whl
Algorithm Hash digest
SHA256 13e4734f27fbd4c837aec9c24b6c57c8c212278c80be199c9cca1f585941eb6e
MD5 f0867fe30e0e83c741be89b09f0707b9
BLAKE2b-256 81129c8db79b68046f9ae104b7976a92f0fa1fc6e0c49c63687c1fbc02886134

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page