Skip to main content

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

I would really recommend using --prefer-binary, especially with older versions of Python (e.g. 3.6). This will install pre-compiled binaries instead of building from source, which is much faster and less error-prone.

pip install mjpeg-streamer --prefer-binary

Latest versions of dependencies (e.g. Numpy) don't always ship with pre-compiled binaries for older versions of Python, so this option installs the latest compatible version instead, even though it might be a bit older.

Usage

Library

Here's a simple example that shows how to use the mjpeg_streamer 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.

To view the streams index, you can open a web browser and navigate to http://localhost:8080.

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

Check out the class reference for more details on the classes and methods provided by the package.

Command Line Interface

The package also provides a simple command line interface that allows you to stream video from multiple sources using a single command. Here's an example that shows how to stream video from a webcam and a video file:

$ mjpeg-streamer -s 0 -s "video file.mp4" --prefix "ender 3 pro" --quality 75 --fps 24 --show-bandwidth

Streams index: http://localhost:8080
Available streams:

http://localhost:8080/ender_3_pro_0
http://localhost:8080/ender_3_pro_video_file_mp4
--------------------------------


Press Ctrl+C to stop the server

ender_3_pro_video_file_mp4: 599.28 KB/s | ender_3_pro_0: 824.44 KB/s

This command starts the MJPEG server on localhost:8080 and streams video from the webcam with the index of 0 and the video file video file.mp4. The streams are prefixed with ender 3 pro and compressed with JPEG quality of 75 and streamed at 24 FPS. The bandwidth of each stream is displayed in the console.

To view the video streams, you can open a web browser and navigate to the URLs displayed in the console.

Run mjpeg-streamer --help for more information on the available options.

Note that the command line interface is limited and doesn't provide the same level of flexibility as the library. It's recommended to use the library if you need to customize the video streams or integrate them into your own application.

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 = 30)

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. Tip: Divide the result by 1024 to get the bandwidth in kilobytes per second.


  • get_frame

    get_frame()
    

    Returns the current frame as a Numpy array.


  • get_frame_processed

    get_frame_processed()
    

    Returns the current frame as a Numpy array after processing it with the specified image size and JPEG quality.

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. Your modified work's license should also mention the original author and a link to this repository.

Metadata

Release files for mjpeg-streamer 2024.2.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mjpeg-streamer 2024.2.8
File Size Uploaded
mjpeg_streamer-2024.2.8.tar.gz 18.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mjpeg-streamer 2024.2.8
File Interpreter ABI Platform
mjpeg_streamer-2024.2.8-py3-none-any.whl Python 3 none any Details

Total release size: 38.4 kB

Release files / mjpeg_streamer-2024.2.8.tar.gz

Download URL mjpeg_streamer-2024.2.8.tar.gz
Size 18.9 kB
Tags Source
SHA-256 checksum
How to use checksums
7fc4407501e79066b7ba67fb0b264743882d3ca4189d70b829a25cacc4e46923
BLAKE2b-256 checksum
How to use checksums
c0f2b84145dd0b591a284484bab535f3c003c69650e32c58d8a76287d1502edb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via python-httpx/0.26.0

Release files / mjpeg_streamer-2024.2.8-py3-none-any.whl

Download URL mjpeg_streamer-2024.2.8-py3-none-any.whl
Size 19.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
377265fd19539b7ac2332385ee7fec36eb337d620f583cdf8332bc5cca018163
BLAKE2b-256 checksum
How to use checksums
71843d04da47ff73fed770390c0480a484077e0a1c0c6cc0149b9f4672c93f1f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via python-httpx/0.26.0

Release history Release notifications | RSS feed

This release

2024.2.8 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page