diff --git a/archive-patches/ffmpeg-4.1-allow_to_choose_rtmp_impl_at_runtime.patch b/archive-patches/ffmpeg-4.1-allow_to_choose_rtmp_impl_at_runtime.patch new file mode 100644 index 00000000..f37e23a2 --- /dev/null +++ b/archive-patches/ffmpeg-4.1-allow_to_choose_rtmp_impl_at_runtime.patch @@ -0,0 +1,126 @@ +--- a/configure 2018-08-17 11:51:31.066805453 +0200 ++++ b/configure 2018-08-17 12:03:19.617555506 +0200 +@@ -3290,10 +3290,8 @@ + # protocols + async_protocol_deps="threads" + bluray_protocol_deps="libbluray" +-ffrtmpcrypt_protocol_conflict="librtmp_protocol" + ffrtmpcrypt_protocol_deps_any="gcrypt gmp openssl mbedtls" + ffrtmpcrypt_protocol_select="tcp_protocol" +-ffrtmphttp_protocol_conflict="librtmp_protocol" + ffrtmphttp_protocol_select="http_protocol" + ftp_protocol_select="tcp_protocol" + gopher_protocol_select="network" +@@ -3306,20 +3304,18 @@ + icecast_protocol_select="http_protocol" + mmsh_protocol_select="http_protocol" + mmst_protocol_select="network" +-rtmp_protocol_conflict="librtmp_protocol" +-rtmp_protocol_select="tcp_protocol" +-rtmp_protocol_suggest="zlib" +-rtmpe_protocol_select="ffrtmpcrypt_protocol" +-rtmpe_protocol_suggest="zlib" +-rtmps_protocol_conflict="librtmp_protocol" +-rtmps_protocol_select="tls_protocol" +-rtmps_protocol_suggest="zlib" +-rtmpt_protocol_select="ffrtmphttp_protocol" +-rtmpt_protocol_suggest="zlib" +-rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol" +-rtmpte_protocol_suggest="zlib" +-rtmpts_protocol_select="ffrtmphttp_protocol https_protocol" +-rtmpts_protocol_suggest="zlib" ++ffrtmp_protocol_select="tcp_protocol" ++ffrtmp_protocol_suggest="zlib" ++ffrtmpe_protocol_select="ffrtmpcrypt_protocol" ++ffrtmpe_protocol_suggest="zlib" ++ffrtmps_protocol_select="tls_protocol" ++ffrtmps_protocol_suggest="zlib" ++ffrtmpt_protocol_select="ffrtmphttp_protocol" ++ffrtmpt_protocol_suggest="zlib" ++ffrtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol" ++ffrtmpte_protocol_suggest="zlib" ++ffrtmpts_protocol_select="ffrtmphttp_protocol https_protocol" ++ffrtmpts_protocol_suggest="zlib" + rtp_protocol_select="udp_protocol" + schannel_conflict="openssl gnutls libtls mbedtls" + sctp_protocol_deps="struct_sctp_event_subscribe struct_msghdr_msg_flags" +--- a/libavformat/Makefile 2018-07-18 15:52:01.000000000 +0200 ++++ b/libavformat/Makefile 2018-08-17 12:06:16.348291303 +0200 +@@ -593,12 +593,12 @@ + OBJS-$(CONFIG_MMST_PROTOCOL) += mmst.o mms.o asf.o + OBJS-$(CONFIG_PIPE_PROTOCOL) += file.o + OBJS-$(CONFIG_PROMPEG_PROTOCOL) += prompeg.o +-OBJS-$(CONFIG_RTMP_PROTOCOL) += rtmpproto.o rtmpdigest.o rtmppkt.o +-OBJS-$(CONFIG_RTMPE_PROTOCOL) += rtmpproto.o rtmpdigest.o rtmppkt.o +-OBJS-$(CONFIG_RTMPS_PROTOCOL) += rtmpproto.o rtmpdigest.o rtmppkt.o +-OBJS-$(CONFIG_RTMPT_PROTOCOL) += rtmpproto.o rtmpdigest.o rtmppkt.o +-OBJS-$(CONFIG_RTMPTE_PROTOCOL) += rtmpproto.o rtmpdigest.o rtmppkt.o +-OBJS-$(CONFIG_RTMPTS_PROTOCOL) += rtmpproto.o rtmpdigest.o rtmppkt.o ++OBJS-$(CONFIG_FFRTMP_PROTOCOL) += rtmpproto.o rtmpdigest.o rtmppkt.o ++OBJS-$(CONFIG_FFRTMPE_PROTOCOL) += rtmpproto.o rtmpdigest.o rtmppkt.o ++OBJS-$(CONFIG_FFRTMPS_PROTOCOL) += rtmpproto.o rtmpdigest.o rtmppkt.o ++OBJS-$(CONFIG_FFRTMPT_PROTOCOL) += rtmpproto.o rtmpdigest.o rtmppkt.o ++OBJS-$(CONFIG_FFRTMPTE_PROTOCOL) += rtmpproto.o rtmpdigest.o rtmppkt.o ++OBJS-$(CONFIG_FFRTMPTS_PROTOCOL) += rtmpproto.o rtmpdigest.o rtmppkt.o + OBJS-$(CONFIG_RTP_PROTOCOL) += rtpproto.o ip.o + OBJS-$(CONFIG_SCTP_PROTOCOL) += sctp.o + OBJS-$(CONFIG_SRTP_PROTOCOL) += srtpproto.o srtp.o +--- a/libavformat/protocols.c 2018-08-17 12:07:59.489872867 +0200 ++++ b/libavformat/protocols.c 2018-08-17 12:08:24.450255607 +0200 +@@ -44,12 +44,12 @@ + extern const URLProtocol ff_md5_protocol; + extern const URLProtocol ff_pipe_protocol; + extern const URLProtocol ff_prompeg_protocol; +-extern const URLProtocol ff_rtmp_protocol; +-extern const URLProtocol ff_rtmpe_protocol; +-extern const URLProtocol ff_rtmps_protocol; +-extern const URLProtocol ff_rtmpt_protocol; +-extern const URLProtocol ff_rtmpte_protocol; +-extern const URLProtocol ff_rtmpts_protocol; ++extern const URLProtocol ff_ffrtmp_protocol; ++extern const URLProtocol ff_ffrtmpe_protocol; ++extern const URLProtocol ff_ffrtmps_protocol; ++extern const URLProtocol ff_ffrtmpt_protocol; ++extern const URLProtocol ff_ffrtmpte_protocol; ++extern const URLProtocol ff_ffrtmpts_protocol; + extern const URLProtocol ff_rtp_protocol; + extern const URLProtocol ff_sctp_protocol; + extern const URLProtocol ff_srtp_protocol; +--- a/libavformat/rtmpproto.c 2018-07-18 15:52:02.000000000 +0200 ++++ b/libavformat/rtmpproto.c 2018-08-17 12:11:43.844590847 +0200 +@@ -2592,7 +2592,7 @@ + static int rtmp_open(URLContext *s, const char *uri, int flags, AVDictionary **opts) + { + RTMPContext *rt = s->priv_data; +- char proto[8], hostname[256], path[1024], auth[100], *fname; ++ char *proto, tmpProto[10], hostname[256], path[1024], auth[100], *fname; + char *old_app, *qmark, *n, fname_buffer[1024]; + uint8_t buf[2048]; + int port; +@@ -2603,7 +2603,9 @@ + + rt->is_input = !(flags & AVIO_FLAG_WRITE); + +- av_url_split(proto, sizeof(proto), auth, sizeof(auth), ++ memset(tmpProto, 0, sizeof(tmpProto)); ++ proto = &tmpProto[2]; ++ av_url_split(tmpProto, sizeof(tmpProto), auth, sizeof(auth), + hostname, sizeof(hostname), &port, + path, sizeof(path), s->filename); + +@@ -3137,9 +3139,9 @@ + }; + + +-RTMP_PROTOCOL(rtmp) +-RTMP_PROTOCOL(rtmpe) +-RTMP_PROTOCOL(rtmps) +-RTMP_PROTOCOL(rtmpt) +-RTMP_PROTOCOL(rtmpte) +-RTMP_PROTOCOL(rtmpts) ++RTMP_PROTOCOL(ffrtmp) ++RTMP_PROTOCOL(ffrtmpe) ++RTMP_PROTOCOL(ffrtmps) ++RTMP_PROTOCOL(ffrtmpt) ++RTMP_PROTOCOL(ffrtmpte) ++RTMP_PROTOCOL(ffrtmpts) diff --git a/archive-patches/ffmpeg-4.1-fix_mpegts.patch b/archive-patches/ffmpeg-4.1-fix_mpegts.patch index 3e6b9d25..0d60245d 100644 --- a/archive-patches/ffmpeg-4.1-fix_mpegts.patch +++ b/archive-patches/ffmpeg-4.1-fix_mpegts.patch @@ -1,6 +1,5 @@ -diff -uNr ffmpeg-3.4.2/libavformat/mpegts.c ffmpeg-3.4.2_fix_mpegts/libavformat/mpegts.c ---- ffmpeg-3.4.2/libavformat/mpegts.c 2018-02-12 01:29:06.000000000 +0100 -+++ ffmpeg-3.4.2_fix_mpegts/libavformat/mpegts.c 2018-02-14 19:36:28.175054407 +0100 +--- a/libavformat/mpegts.c 2018-02-12 01:29:06.000000000 +0100 ++++ b/libavformat/mpegts.c 2018-02-14 19:36:28.175054407 +0100 @@ -948,10 +948,12 @@ pes->buffer = NULL; reset_pes_packet_state(pes); diff --git a/archive-patches/ffmpeg-4.1-hls_replace_key_uri.patch b/archive-patches/ffmpeg-4.1-hls_replace_key_uri.patch index f176282d..44367438 100644 --- a/archive-patches/ffmpeg-4.1-hls_replace_key_uri.patch +++ b/archive-patches/ffmpeg-4.1-hls_replace_key_uri.patch @@ -1,6 +1,6 @@ --- a/libavformat/hls.c 2018-08-17 13:16:57.721007600 +0200 +++ b/libavformat/hls.c 2018-08-17 13:33:57.530170057 +0200 -@@ -213,6 +213,8 @@ +@@ -208,6 +208,8 @@ int max_reload; int http_persistent; int http_multiple; @@ -9,8 +9,8 @@ AVIOContext *playlist_pb; } HLSContext; -@@ -1196,8 +1198,16 @@ - AVDictionary *opts2 = NULL; +@@ -1198,8 +1200,16 @@ + } else if (seg->key_type == KEY_AES_128) { char iv[33], key[33], url[MAX_URL_SIZE]; if (strcmp(seg->key, pls->key_url)) { + char *key_url = NULL; @@ -27,7 +27,7 @@ ret = avio_read(pb, pls->key, sizeof(pls->key)); if (ret != sizeof(pls->key)) { av_log(NULL, AV_LOG_ERROR, "Unable to read key file %s\n", -@@ -1209,6 +1219,8 @@ +@@ -1211,6 +1221,8 @@ seg->key); } av_strlcpy(pls->key_url, seg->key, sizeof(pls->key_url)); @@ -36,7 +36,7 @@ } ff_data_to_hex(iv, seg->iv, sizeof(seg->iv), 0); ff_data_to_hex(key, pls->key, sizeof(pls->key), 0); -@@ -2332,6 +2344,8 @@ +@@ -2315,6 +2327,8 @@ OFFSET(http_persistent), AV_OPT_TYPE_BOOL, {.i64 = 1}, 0, 1, FLAGS }, {"http_multiple", "Use multiple HTTP connections for fetching segments", OFFSET(http_multiple), AV_OPT_TYPE_BOOL, {.i64 = -1}, -1, 1, FLAGS}, diff --git a/make/ffmpeg-armbox.mk b/make/ffmpeg-armbox.mk index 4c793e40..058aba61 100644 --- a/make/ffmpeg-armbox.mk +++ b/make/ffmpeg-armbox.mk @@ -19,6 +19,7 @@ FFMPEG_PATCH += ffmpeg-$(FFMPEG_VER)-optimize_aac.patch FFMPEG_PATCH += ffmpeg-$(FFMPEG_VER)-fix_edit_list_parsing.patch # ffmpeg exteplayer3 patches FFMPEG_PATCH += ffmpeg-$(FFMPEG_VER)-fix_mpegts.patch +FFMPEG_PATCH += ffmpeg-$(FFMPEG_VER)-allow_to_choose_rtmp_impl_at_runtime.patch FFMPEG_PATCH += ffmpeg-$(FFMPEG_VER)-hls_replace_key_uri.patch # -----------------------------------------------------------------------------