Compare commits

...

4 Commits
v5.49 ... v5.50

Author SHA1 Message Date
Maxim Devaev
41330940c6 Bump version: 5.49 → 5.50 2024-02-16 17:15:26 +02:00
Maxim Devaev
46e630d2f6 using (void) instead of UNUSED 2024-02-16 01:51:36 +02:00
Maxim Devaev
63d87f0526 add instance_id to stream_client cookie name 2024-02-15 15:52:03 +02:00
Maxim Devaev
b578e9897e notes about libcamerify 2024-02-03 20:14:19 +02:00
12 changed files with 41 additions and 20 deletions

View File

@@ -1,7 +1,7 @@
[bumpversion] [bumpversion]
commit = True commit = True
tag = True tag = True
current_version = 5.49 current_version = 5.50
parse = (?P<major>\d+)\.(?P<minor>\d+) parse = (?P<major>\d+)\.(?P<minor>\d+)
serialize = serialize =
{major}.{minor} {major}.{minor}

View File

@@ -151,7 +151,7 @@ Add `-e EDID=1` to set HDMI EDID before starting ustreamer. Use together with `-
----- -----
# Raspberry Pi Camera Example # Raspberry Pi Camera Example
Example usage for the Raspberry Pi v3 camera (required `libcamerify` which is located in `libcamera-tools` on Raspbian): Example usage for the Raspberry Pi v3 camera (required `libcamerify` which is located in `libcamera-tools` and `libcamera-v4l2` (install both) on Raspbian):
``` ```
$ sudo modprobe bcm2835-v4l2 $ sudo modprobe bcm2835-v4l2
$ libcamerify ./ustreamer --host :: --encoder=m2m-image $ libcamerify ./ustreamer --host :: --encoder=m2m-image

View File

@@ -99,7 +99,9 @@ static atomic_bool _g_key_required = false;
janus_plugin *create(void); janus_plugin *create(void);
static void *_video_rtp_thread(UNUSED void *arg) { static void *_video_rtp_thread(void *arg) {
(void)arg;
US_THREAD_RENAME("us_video_rtp"); US_THREAD_RENAME("us_video_rtp");
atomic_store(&_g_video_rtp_tid_created, true); atomic_store(&_g_video_rtp_tid_created, true);
@@ -116,7 +118,9 @@ static void *_video_rtp_thread(UNUSED void *arg) {
return NULL; return NULL;
} }
static void *_video_sink_thread(UNUSED void *arg) { static void *_video_sink_thread(void *arg) {
(void)arg;
US_THREAD_RENAME("us_video_sink"); US_THREAD_RENAME("us_video_sink");
atomic_store(&_g_video_sink_tid_created, true); atomic_store(&_g_video_sink_tid_created, true);
@@ -178,7 +182,9 @@ static void *_video_sink_thread(UNUSED void *arg) {
return NULL; return NULL;
} }
static void *_audio_thread(UNUSED void *arg) { static void *_audio_thread(void *arg) {
(void)arg;
US_THREAD_RENAME("us_audio"); US_THREAD_RENAME("us_audio");
atomic_store(&_g_audio_tid_created, true); atomic_store(&_g_audio_tid_created, true);
assert(_g_config->audio_dev_name != NULL); assert(_g_config->audio_dev_name != NULL);
@@ -344,7 +350,8 @@ static json_t *_plugin_query_session(janus_plugin_session *session) {
return info; return info;
} }
static void _set_transmit(janus_plugin_session *session, UNUSED const char *msg, bool transmit) { static void _set_transmit(janus_plugin_session *session, const char *msg, bool transmit) {
(void)msg;
_IF_DISABLED({ return; }); _IF_DISABLED({ return; });
_LOCK_ALL; _LOCK_ALL;
bool found = false; bool found = false;
@@ -503,7 +510,9 @@ static struct janus_plugin_result *_plugin_handle_message(
# undef FREE_MSG_JSEP # undef FREE_MSG_JSEP
} }
static void _plugin_incoming_rtcp(UNUSED janus_plugin_session *handle, UNUSED janus_plugin_rtcp *packet) { static void _plugin_incoming_rtcp(janus_plugin_session *handle, janus_plugin_rtcp *packet) {
(void)handle;
(void)packet;
if (packet->video && janus_rtcp_has_pli(packet->buffer, packet->length)) { if (packet->video && janus_rtcp_has_pli(packet->buffer, packet->length)) {
// US_JLOG_INFO("main", "Got video PLI"); // US_JLOG_INFO("main", "Got video PLI");
atomic_store(&_g_key_required, true); atomic_store(&_g_key_required, true);

View File

@@ -1,6 +1,6 @@
.\" Manpage for ustreamer-dump. .\" Manpage for ustreamer-dump.
.\" Open an issue or pull request to https://github.com/pikvm/ustreamer to correct errors or typos .\" Open an issue or pull request to https://github.com/pikvm/ustreamer to correct errors or typos
.TH USTREAMER-DUMP 1 "version 5.49" "January 2021" .TH USTREAMER-DUMP 1 "version 5.50" "January 2021"
.SH NAME .SH NAME
ustreamer-dump \- Dump uStreamer's memory sink to file ustreamer-dump \- Dump uStreamer's memory sink to file

View File

@@ -1,6 +1,6 @@
.\" Manpage for ustreamer. .\" Manpage for ustreamer.
.\" Open an issue or pull request to https://github.com/pikvm/ustreamer to correct errors or typos .\" Open an issue or pull request to https://github.com/pikvm/ustreamer to correct errors or typos
.TH USTREAMER 1 "version 5.49" "November 2020" .TH USTREAMER 1 "version 5.50" "November 2020"
.SH NAME .SH NAME
ustreamer \- stream MJPEG video from any V4L2 device to the network ustreamer \- stream MJPEG video from any V4L2 device to the network

View File

@@ -3,7 +3,7 @@
pkgname=ustreamer pkgname=ustreamer
pkgver=5.49 pkgver=5.50
pkgrel=1 pkgrel=1
pkgdesc="Lightweight and fast MJPEG-HTTP streamer" pkgdesc="Lightweight and fast MJPEG-HTTP streamer"
url="https://github.com/pikvm/ustreamer" url="https://github.com/pikvm/ustreamer"

View File

@@ -6,7 +6,7 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=ustreamer PKG_NAME:=ustreamer
PKG_VERSION:=5.49 PKG_VERSION:=5.50
PKG_RELEASE:=1 PKG_RELEASE:=1
PKG_MAINTAINER:=Maxim Devaev <mdevaev@gmail.com> PKG_MAINTAINER:=Maxim Devaev <mdevaev@gmail.com>

View File

@@ -17,7 +17,7 @@ def _find_sources(suffix: str) -> list[str]:
if __name__ == "__main__": if __name__ == "__main__":
setup( setup(
name="ustreamer", name="ustreamer",
version="5.49", version="5.50",
description="uStreamer tools", description="uStreamer tools",
author="Maxim Devaev", author="Maxim Devaev",
author_email="mdevaev@gmail.com", author_email="mdevaev@gmail.com",

View File

@@ -23,7 +23,7 @@
#pragma once #pragma once
#define US_VERSION_MAJOR 5 #define US_VERSION_MAJOR 5
#define US_VERSION_MINOR 49 #define US_VERSION_MINOR 50
#define US_MAKE_VERSION2(_major, _minor) #_major "." #_minor #define US_MAKE_VERSION2(_major, _minor) #_major "." #_minor
#define US_MAKE_VERSION1(_major, _minor) US_MAKE_VERSION2(_major, _minor) #define US_MAKE_VERSION1(_major, _minor) US_MAKE_VERSION2(_major, _minor)

View File

@@ -57,7 +57,6 @@
#define RN "\r\n" #define RN "\r\n"
#define INLINE inline __attribute__((always_inline)) #define INLINE inline __attribute__((always_inline))
#define UNUSED __attribute__((unused))
#define US_CALLOC(x_dest, x_nmemb) assert(((x_dest) = calloc((x_nmemb), sizeof(*(x_dest)))) != NULL) #define US_CALLOC(x_dest, x_nmemb) assert(((x_dest) = calloc((x_nmemb), sizeof(*(x_dest)))) != NULL)
#define US_REALLOC(x_dest, x_nmemb) assert(((x_dest) = realloc((x_dest), (x_nmemb) * sizeof(*(x_dest)))) != NULL) #define US_REALLOC(x_dest, x_nmemb) assert(((x_dest) = realloc((x_dest), (x_nmemb) * sizeof(*(x_dest)))) != NULL)

View File

@@ -667,10 +667,12 @@ static void _http_callback_stream_write(struct bufferevent *buf_event, void *v_c
"Cache-Control: no-store, no-cache, must-revalidate, proxy-revalidate, pre-check=0, post-check=0, max-age=0" RN "Cache-Control: no-store, no-cache, must-revalidate, proxy-revalidate, pre-check=0, post-check=0, max-age=0" RN
"Pragma: no-cache" RN "Pragma: no-cache" RN
"Expires: Mon, 3 Jan 2000 12:34:56 GMT" RN "Expires: Mon, 3 Jan 2000 12:34:56 GMT" RN
"Set-Cookie: stream_client=%s/%" PRIx64 "; path=/; max-age=30" RN "Set-Cookie: stream_client%s%s=%s/%" PRIx64 "; path=/; max-age=30" RN
"Content-Type: multipart/x-mixed-replace;boundary=" BOUNDARY RN "Content-Type: multipart/x-mixed-replace;boundary=" BOUNDARY RN
RN RN
"--" BOUNDARY RN, "--" BOUNDARY RN,
(server->instance_id[0] == '\0' ? "" : "_"),
server->instance_id,
(client->key != NULL ? client->key : "0"), (client->key != NULL ? client->key : "0"),
client->id client->id
); );
@@ -745,7 +747,10 @@ static void _http_callback_stream_write(struct bufferevent *buf_event, void *v_c
# undef BOUNDARY # undef BOUNDARY
} }
static void _http_callback_stream_error(UNUSED struct bufferevent *buf_event, UNUSED short what, void *v_client) { static void _http_callback_stream_error(struct bufferevent *buf_event, short what, void *v_client) {
(void)buf_event;
(void)what;
us_stream_client_s *const client = (us_stream_client_s *)v_client; us_stream_client_s *const client = (us_stream_client_s *)v_client;
us_server_s *const server = client->server; us_server_s *const server = client->server;
@@ -823,7 +828,10 @@ static void _http_queue_send_stream(us_server_s *server, bool stream_updated, bo
} }
} }
static void _http_request_watcher(UNUSED int fd, UNUSED short what, void *v_server) { static void _http_request_watcher(int fd, short what, void *v_server) {
(void)fd;
(void)what;
us_server_s *server = (us_server_s *)v_server; us_server_s *server = (us_server_s *)v_server;
const long double now = us_get_now_monotonic(); const long double now = us_get_now_monotonic();
@@ -837,7 +845,10 @@ static void _http_request_watcher(UNUSED int fd, UNUSED short what, void *v_serv
} }
} }
static void _http_refresher(UNUSED int fd, UNUSED short what, void *v_server) { static void _http_refresher(int fd, short what, void *v_server) {
(void)fd;
(void)what;
us_server_s *server = (us_server_s *)v_server; us_server_s *server = (us_server_s *)v_server;
bool stream_updated = false; bool stream_updated = false;
bool frame_updated = false; bool frame_updated = false;

View File

@@ -52,14 +52,16 @@ static void _block_thread_signals(void) {
assert(!pthread_sigmask(SIG_BLOCK, &mask, NULL)); assert(!pthread_sigmask(SIG_BLOCK, &mask, NULL));
} }
static void *_stream_loop_thread(UNUSED void *arg) { static void *_stream_loop_thread(void *arg) {
(void)arg;
US_THREAD_RENAME("stream"); US_THREAD_RENAME("stream");
_block_thread_signals(); _block_thread_signals();
us_stream_loop(_g_stream); us_stream_loop(_g_stream);
return NULL; return NULL;
} }
static void *_server_loop_thread(UNUSED void *arg) { static void *_server_loop_thread(void *arg) {
(void)arg;
US_THREAD_RENAME("http"); US_THREAD_RENAME("http");
_block_thread_signals(); _block_thread_signals();
us_server_loop(_g_server); us_server_loop(_g_server);