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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for mjpeg_streamer-2023.12.25.post0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | db9922bbad84a34e746191b04b902320c7aedb12b406317f7b6da7f3bec6a4c4 |
|
MD5 | 0ef96425db0abb577edb778184ce55cd |
|
BLAKE2b-256 | b9d91ef7ee6a77f9eda93a65230cb8c61b0dcb418a6e3b635c24d55fa144713e |
Hashes for mjpeg_streamer-2023.12.25.post0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 13e4734f27fbd4c837aec9c24b6c57c8c212278c80be199c9cca1f585941eb6e |
|
MD5 | f0867fe30e0e83c741be89b09f0707b9 |
|
BLAKE2b-256 | 81129c8db79b68046f9ae104b7976a92f0fa1fc6e0c49c63687c1fbc02886134 |