sylware / nyanmp (public) (License: AGPLv3) (since 2020-02-12) (hash sha1)
intended to become a collection of media players for gnu/linux based on ffmpeg, alsa, vulkan, x11, wayland, etc.
List of commits:
Subject Hash Author Date (UTC)
npv: my iap hls peering with twitch.tv is accute trash 4ab8caadb41ac42482f8c7a43725054067674fe3 Sylvain BERTRAND 2022-08-30 17:17:21
npv: alsa, POLLERR is XRUN 73c89d6529123fca081c4f55d1a57eab4ede7b90 Sylvain BERTRAND 2022-06-30 15:43:27
npv: may help IAPs with bad peerings 7ec70f67d779a478f065f0e92259e52f8315d113 Sylvain BERTRAND 2022-06-30 15:42:47
move to new ffmpeg channel layout handling 938790d0c657278f405c4f57987d2274c5ada9b7 Sylvain BERTRAND 2022-03-20 22:18:01
npa: fine grained volume control 89279ea0c7dcaf7a718c9a57ecb6b08a0ccfbcb9 Sylvain BERTRAND 2022-02-15 23:24:36
npv: add fine grained volume control 06bc3b77b065f35f294659db520f66e7e8094c8c Sylvain BERTRAND 2022-02-15 18:47:34
npv: move to freetype SDF rendering 972a3027fec3b69a1e10405cc0da35b5194b6f46 Sylvain BERTRAND 2021-12-27 20:54:53
npv:osd:ascii only mode for the timer 3de3158fc3300f8a9c6f75fcca76b512331b8c2f Sylvain BERTRAND 2021-10-30 19:18:38
npv: default to dejavu instead of noto 708f3166a09fd7ba815ec47907cabfb1af4d26c5 Sylvain BERTRAND 2021-10-10 17:05:17
npv: live mode and ready the code for indicators.. if ever... 2d6ddb83edd6f08e99fbe01dc60a354b5e5a2afe Sylvain BERTRAND 2021-07-23 13:17:47
npv: don't block the muted state 0c29e9329ec5db6bed191b2b4caffff8166bd11f Sylvain BERTRAND 2021-07-21 21:34:37
npv: now we have enough perspective, make states internal 62f6b1bf62fc083762f036ddde1f29dd23baf814 Sylvain BERTRAND 2021-07-21 20:12:36
npv/npa: add gcc4 atomic support d9676b20984dcbfd8df4afbf85178c8ff4295e4f Sylvain BERTRAND 2021-06-18 15:04:01
npv: better reuse of ffmpeg references, stats 4bb1b9ab45609f8e5113cc7613ebc1d09499561b Sylvain BERTRAND 2021-05-20 18:24:32
npv: avoid stale frames fb20683b7cb91622b639b05e8b324d13edc72522 Sylvain BERTRAND 2021-05-16 20:51:34
npv: inverted resync logic and rate limiter 9e772be0d5e19dc4dcef05ee2b4ce47c42788f8e Sylvain BERTRAND 2021-05-16 18:06:23
npv:trying to work around nasty live streams 544ddd3381ad56363bb275ae59419e97e8c86895 Sylvain BERTRAND 2021-05-14 15:45:19
npv:spurious braces e8678920198c6795420c54a839b92e5d301b4183 Sylvain BERTRAND 2021-05-06 20:55:38
npv:pts debug tracing, ffmpeg dev tantrum 8c3bf9cf42fc3419b64c232f905c5c580d6a1942 Sylvain BERTRAND 2021-05-06 18:37:35
npa: forgot zero-ing before cmp ceff7a70798b604bdb876a92ba0c446e3ede8a5b Sylvain BERTRAND 2021-04-15 20:15:07
Commit 4ab8caadb41ac42482f8c7a43725054067674fe3 - npv: my iap hls peering with twitch.tv is accute trash
Author: Sylvain BERTRAND
Author date (UTC): 2022-08-30 17:17
Committer name: Sylvain BERTRAND
Committer date (UTC): 2022-08-30 17:17
Parent(s): 73c89d6529123fca081c4f55d1a57eab4ede7b90
Signer:
Signing key:
Signing status: N
Tree: e0dc2ed03324798898908de94cc8378fe691ef8e
File Lines added Lines deleted
npv/TODO 1 0
npv/config.h 6 0
npv/fmt/local/code.frag.c 12 0
npv/fmt/namespace/main.c 2 0
npv/fmt/public/code.frag.c 21 10
npv/pipeline/public/code.frag.c 3 2
File npv/TODO changed (mode: 100644) (index 90608f3..0158304)
1 1 not ordered: not ordered:
2 - move to a shared audio/video prefill
2 3 - try to workaround as much as possible the nasty live streams out there. - try to workaround as much as possible the nasty live streams out there.
3 4 - "buffering" indicator (no)? subtitles (mmmmh...)? - "buffering" indicator (no)? subtitles (mmmmh...)?
4 5 - use vulkan shaders (no glsl or hlsl), compute or not, in order to perform - use vulkan shaders (no glsl or hlsl), compute or not, in order to perform
File npv/config.h changed (mode: 100644) (index 1fe6dee..706648e)
... ... struct npv_x11_bind_t npv_x11_binds[] = {
95 95 * or 60 fps * or 60 fps
96 96 */ */
97 97 #define RESYNC_RATE_LIMITER_MS 16 #define RESYNC_RATE_LIMITER_MS 16
98 /*
99 * our iap hls peering with twitch.tv is accute trash, ffmpeg allows us to
100 * flush and retry. Let's do that in the pipeline read thread, may need a timer
101 * to avoid hammering the peering links though.
102 */
103 #define FMT_RETRIES_N 100
98 104 #endif #endif
File npv/fmt/local/code.frag.c changed (mode: 100644) (index 477055e..27a391b)
... ... STATIC void fatal(u8 *fmt, ...)
7 7 npv_vfatal(fmt, ap); npv_vfatal(fmt, ap);
8 8 va_end(ap); /* unreachable */ va_end(ap); /* unreachable */
9 9 } }
10 STATIC void warning(u8 *fmt, ...)
11 {
12 va_list ap;
13
14 npv_perr("format:WARNING:");
15 va_start(ap, fmt);
16 npv_vperr(fmt, ap);
17 va_end(ap);
18 }
10 19 STATIC void pout(u8 *fmt, ...) STATIC void pout(u8 *fmt, ...)
11 20 { {
12 21 va_list ap; va_list ap;
 
... ... STATIC void init_once_public(u8 *url)
36 45 int r; int r;
37 46 AVDictionary *options = 0; AVDictionary *options = 0;
38 47
48 av_dict_set(&options, "reconnect", "1", 0);
49 /* av_dict_set(&options, "reconnect_at_eof", "1", 0); breaks youtube live */
39 50 av_dict_set(&options, "reconnect_on_network_error", "1", 0); av_dict_set(&options, "reconnect_on_network_error", "1", 0);
51 av_dict_set(&options, "reconnect_streamed", "1", 0);
40 52
41 53 ctx_p = 0; ctx_p = 0;
42 54 r = avformat_open_input(&ctx_p, url, NULL, &options); r = avformat_open_input(&ctx_p, url, NULL, &options);
File npv/fmt/namespace/main.c changed (mode: 100644) (index d245a54..05a993a)
15 15 #define pkt_l npv_fmt_pkt_l #define pkt_l npv_fmt_pkt_l
16 16 #define pout npv_fmt_pout #define pout npv_fmt_pout
17 17 #define video npv_fmt_break_on_video #define video npv_fmt_break_on_video
18 #define warning npv_fmt_warning
18 19 /*============================================================================*/ /*============================================================================*/
19 20 #else #else
20 21 /*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
 
32 33 #undef pout #undef pout
33 34 #undef pkt_l #undef pkt_l
34 35 #undef video #undef video
36 #undef warning
35 37 #endif #endif
File npv/fmt/public/code.frag.c changed (mode: 100644) (index f5c1a38..874b4e9)
... ... STATIC u8 *duration_estimate_to_str(enum avformat_duration_estimation_method_t
38 38 STATIC u8 pkts_read_and_q(void) { loop STATIC u8 pkts_read_and_q(void) { loop
39 39 { {
40 40 int r; int r;
41 u8 retries_n;
41 42
42 43 if (did_reached_limits()) if (did_reached_limits())
43 44 return LIMITS_REACHED; return LIMITS_REACHED;
44 /* XXX: there, new streams can appear (could some disappear?) */
45 ctx_lock();
46 r = avformat_read_pkt(ctx_p, pkt_l);
47 ctx_unlock();
48 if (r == AVERROR(EAGAIN))
49 return AGAIN;
50 else if (r == AVERROR_EOF)
51 return EOF_FMT;
52 else if (r != 0)
53 fatal("ffmpeg:error while reading coded/compressed data into packets\n");
45 retries_n = 0;
46 loop {
47 /* XXX: there, new streams can appear (could some disappear?) */
48 ctx_lock();
49 r = avformat_read_pkt(ctx_p, pkt_l);
50 ctx_unlock();
51 if (r == AVERROR(EAGAIN))
52 return AGAIN;
53 else if (r == AVERROR_EOF)
54 return EOF_FMT;
55 else if (r != 0) {
56 if (retries_n == FMT_RETRIES_N)
57 fatal("ffmpeg:error while reading coded/compressed data into packets\n");
58 warning("ffmpeg:error while reading coded/compressed data into packets, flushing, retries = %u(%u)\n", retries_n, FMT_RETRIES_N);
59 flush();
60 ++retries_n;
61 continue;
62 }
63 break;
64 }
54 65 /* r == 0 */ /* r == 0 */
55 66 if (pkt_l->st_idx == npv_audio_st_p.idx) { if (pkt_l->st_idx == npv_audio_st_p.idx) {
56 67 npv_pipeline_limits_lock(); npv_pipeline_limits_lock();
File npv/pipeline/public/code.frag.c changed (mode: 100644) (index bc341e7..e922715)
... ... STATIC void limits_reset(void)
2 2 { {
3 3 limits_p.pkts.audio_bytes_n = 0; limits_p.pkts.audio_bytes_n = 0;
4 4 limits_p.pkts.video_bytes_n = 0; limits_p.pkts.video_bytes_n = 0;
5 /* TODO: nah, move to a shared audio/video quantities */
5 6 /* hardcoded for now: arbitrary rough estimates */ /* hardcoded for now: arbitrary rough estimates */
6 /* ~8s of 400kb audio */
7 limits_p.pkts.limit.audio_bytes_n = 400000 / 8 * 8;
7 /* ~8s of 200kb audio */
8 limits_p.pkts.limit.audio_bytes_n = 200000 / 8 * 8;
8 9 /* ~8s of 10Mb video */ /* ~8s of 10Mb video */
9 10 limits_p.pkts.limit.video_bytes_n = 10000000 / 8 * 8; limits_p.pkts.limit.video_bytes_n = 10000000 / 8 * 8;
10 11 } }
Hints:
Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://rocketgit.com/user/sylware/nyanmp

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@ssh.rocketgit.com/user/sylware/nyanmp

Clone this repository using git:
git clone git://git.rocketgit.com/user/sylware/nyanmp

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a merge request:
... clone the repository ...
... make some changes and some commits ...
git push origin main