Commit Graph

372 Commits

Author SHA1 Message Date
Josh Allmann ee88f31d34 libavformat/rtmpproto: Plug leak if sending bytes read report fails.
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2018-01-25 20:42:39 +01:00
James Almer 5f84ad3ecc Merge commit 'b864230c49089b087eef56988a3d6a784f6f9827'
* commit 'b864230c49089b087eef56988a3d6a784f6f9827':
  rtmp: Move RTMP digest calculation to a separate file

Merged-by: James Almer <jamrial@gmail.com>
2017-10-21 13:32:13 -03:00
James Almer 4ea63d2cdd Merge commit '15a92e0c402c830b607f905d6bf203b6cfb4fa8c'
* commit '15a92e0c402c830b607f905d6bf203b6cfb4fa8c':
  rtmp: Correctly handle the Window Acknowledgement Size packets

Merged-by: James Almer <jamrial@gmail.com>
2017-09-26 18:34:25 -03:00
James Almer f858a6e278 Merge commit 'a1a143adb0fd11c474221431417cff25db7d920f'
* commit 'a1a143adb0fd11c474221431417cff25db7d920f':
  rtmp: Rename packet types to closer match the spec

Merged-by: James Almer <jamrial@gmail.com>
2017-09-26 18:29:05 -03:00
Derek Buitenhuis c27d7c027c rtmpproto: Fix error return
Mistake was added in 5840473890.

Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
2017-07-07 15:30:57 -04:00
Ricardo Constantino c0b3781bf2 rtmpproto: send swfverify value as swfurl if latter is unused
Replicates lavf/librtmp.c behavior in L149-156 and rtmpdump's
behavior with "--swfVfy <url>" passing the url to swfUrl.

Fixes trac ticket #5549.

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2017-05-07 00:57:08 +02:00
Clément Bœsch 72dbfe42ef Merge commit 'f4ca8ea92a8b36fe723412aefafc1b2fa89f8dc6'
* commit 'f4ca8ea92a8b36fe723412aefafc1b2fa89f8dc6':
  rtmpproto: Restructure zlib code to avoid unreachable code warning

Merged-by: Clément Bœsch <u@pkh.me>
2017-03-29 15:17:59 +02:00
Clément Bœsch 4e43c6df54 Merge commit 'c541a44e029e8a4f21db028c34fee3ad1c10a409'
* commit 'c541a44e029e8a4f21db028c34fee3ad1c10a409':
  Revert "rtmpproto: Don't include a client version in the unencrypted C1 handshake"

Merged-by: Clément Bœsch <u@pkh.me>
2017-03-27 22:21:18 +02:00
Clément Bœsch 8892739a16 Merge commit '7d8d726be7dc46343ab1c98c339c1ed44bcb07c1'
* commit '7d8d726be7dc46343ab1c98c339c1ed44bcb07c1':
  rtmpproto: Don't include a client version in the unencrypted C1 handshake

Merged-by: Clément Bœsch <u@pkh.me>
2017-03-23 16:37:58 +01:00
Clément Bœsch ddcd396075 Merge commit '9f23f77a532ca9c2b7dc4b5328bc413e4f6f5b56'
* commit '9f23f77a532ca9c2b7dc4b5328bc413e4f6f5b56':
  rtmpproto: Don't include the libavformat version as "clientid"

Merged-by: Clément Bœsch <u@pkh.me>
2017-03-23 16:37:31 +01:00
Clément Bœsch d1c341f77b Merge commit '8b5e0d17e70400eaf5dc3845b5c1df8b2b88d830'
* commit '8b5e0d17e70400eaf5dc3845b5c1df8b2b88d830':
  rtmpproto: Send chunk size on the network channel

Merged-by: Clément Bœsch <u@pkh.me>
2017-03-23 16:36:05 +01:00
Clément Bœsch a106b7e8b9 Merge commit 'd6ded94036e43a04889f4ff2813a7f7dd60b82fe'
* commit 'd6ded94036e43a04889f4ff2813a7f7dd60b82fe':
  rtmpproto: Lengthen the filename buffer when receiving streams

Merged-by: Clément Bœsch <u@pkh.me>
2017-03-23 16:35:17 +01:00
Clément Bœsch 36fcbc0076 Merge commit '7395784ba72742b6daa62d35db4028e09f3fdf06'
* commit '7395784ba72742b6daa62d35db4028e09f3fdf06':
  rtmpproto: Check the return from ff_amf_read_string

Merged-by: Clément Bœsch <u@pkh.me>
2017-03-23 16:34:19 +01:00
Steven Liu 8ddadf56f6 avformat/rtmpproto: change rtmp_open from url_open to url_open2
use the option set by user

Reported-by: Lancelot Lai <laihy23@gmail.com>
Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
2017-03-22 18:06:14 +08:00
Diego Biurrun b864230c49 rtmp: Move RTMP digest calculation to a separate file
The rtmpcrypt protocol requires it.
2017-03-20 13:16:51 +01:00
Martin Storsjö 15a92e0c40 rtmp: Correctly handle the Window Acknowledgement Size packets
This swaps which field is set when the Window Acknowledgement Size
and Set Peer BW packets are received, renames the fields in
order to clarify their role further and adds verbose comments
explaining their respective roles and how well the code currently
does what it is supposed to.

The Set Peer BW packet tells the receiver of the packet (which
can be either client or server) that it should not send more data
if it already has sent more data than the specified number of bytes,
without receiving acknowledgement for them. Actually checking this
limit is currently not implemented.

In order to be able to check that properly, one can send the
Window Acknowledgement Size packet, which tells the receiver of the
packet that it needs to send Acknowledgement packets
(RTMP_PT_BYTES_READ) at least after receiving a given number of bytes
since the last Acknowledgement.

Therefore, when we receive a Window Acknowledgement Size packet,
this sets the maximum number of bytes we can receive without sending
an Acknowledgement; therefore when handling this packet we should set
the receive_report_size field (previously client_report_size).

Signed-off-by: Martin Storsjö <martin@martin.st>
2017-02-03 09:27:41 +02:00
Martin Storsjö a1a143adb0 rtmp: Rename packet types to closer match the spec
Also rename comments and log messages accordingly,
and add clarifying comments for some hardcoded values.

The previous names were taken from older, reverse engineered
references.

These names match the official public rtmp specification, and
matches the names used by wirecast in annotating captured
streams. These names also avoid hardcoding the roles of server
and client, since the handling of them is irrelevant of whether
we act as server or client.

The RTMP_PT_PING type maps to RTMP_PT_USER_CONTROL.

The SERVER_BW and CLIENT_BW types are a bit more intertwined;
RTMP_PT_SERVER_BW maps to RTMP_PT_WINDOW_ACK_SIZE and
RTMP_PT_CLIENT_BW maps to RTMP_PT_SET_PEER_BW.

Signed-off-by: Martin Storsjö <martin@martin.st>
2017-02-03 09:26:46 +02:00
Luca Barbato 11e225db31 rtmp: Account for bytes_read wraparound
Servers seem to be happy to receive the wrapped-around value as long
as they receive a report, otherwise they timeout.

Initially reported and analyzed by Thomas Bernhard.
2017-01-29 18:10:44 +01:00
Carl Eugen Hoyos 75bd4ea024 lavf/rtmpproto: Make bytes_read variables 64bit.
When bytes_read overflowed, last_bytes_read did not yet overflow
and no bytes-read report was created leading to a timeout.

Analyzed-by: Thomas Bernhard

Fixes ticket #5836.
2017-01-25 00:39:13 +01:00
Diego Biurrun f4ca8ea92a rtmpproto: Restructure zlib code to avoid unreachable code warning
libavformat\rtmpproto.c(1165) : warning C4702: unreachable code
2016-11-02 10:33:39 +01:00
Luca Barbato c541a44e02 Revert "rtmpproto: Don't include a client version in the unencrypted C1 handshake"
This reverts commit 7d8d726be7.
2016-10-30 21:55:03 +01:00
Hiroyuki OYAMA 47f74df29c avformat/rtmpproto: Fix RTMP control message handling error in listen mode.
Fix problem to fail by a RTMP Control Message except "Set Chunk Size (1)" after an RTMP handshake. When 'nginx-rtmp-module' relays an RTMP, it sends not only control message 'Set Chunk Size (1)' but also 'Window Acknowledgement Size (5)'.

Reviewed-by: Steven Liu <lingjiujianke@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-10-21 16:16:32 +02:00
Martin Storsjö 7d8d726be7 rtmpproto: Don't include a client version in the unencrypted C1 handshake
According to the public RTMP specification, these 4 bytes should
be zero.

librtmp in server mode assumes that the RTMPE (FP9) handshake is
used if these bytes are nonzero.

Signed-off-by: Martin Storsjö <martin@martin.st>
2016-10-14 23:11:19 +03:00
Martin Storsjö 9f23f77a53 rtmpproto: Don't include the libavformat version as "clientid"
When acting as server, the server can include a "clientid" property
in some status messages. But this should be a unique number
identifying the client session, not identifying the server itself.
In practice, omitting it works just as well as including this
incorrect field.

Signed-off-by: Martin Storsjö <martin@martin.st>
2016-10-14 23:11:17 +03:00
Martin Storsjö 8b5e0d17e7 rtmpproto: Send chunk size on the network channel
This makes sure that e.g. Adobe FME actually reacts to it. As long
as the value we've been sending is the default one (128), the bug
hasn't been noticed.

Signed-off-by: Martin Storsjö <martin@martin.st>
2016-10-14 23:11:15 +03:00
Martin Storsjö d6ded94036 rtmpproto: Lengthen the filename buffer when receiving streams
Some applications such as Adobe FME append lots of parameters
here, making it easily overflow the current limit.

Signed-off-by: Martin Storsjö <martin@martin.st>
2016-10-14 23:11:12 +03:00
Martin Storsjö 7395784ba7 rtmpproto: Check the return from ff_amf_read_string
If this failed, we used to continue with an uninitialized
filename buffer.

CC: libav-stable@libav.org
Signed-off-by: Martin Storsjö <martin@martin.st>
2016-10-14 23:11:08 +03:00
Clément Bœsch 8ef57a0d61 Merge commit '41ed7ab45fc693f7d7fc35664c0233f4c32d69bb'
* commit '41ed7ab45fc693f7d7fc35664c0233f4c32d69bb':
  cosmetics: Fix spelling mistakes

Merged-by: Clément Bœsch <u@pkh.me>
2016-06-21 21:55:34 +02:00
Vittorio Giovara 41ed7ab45f cosmetics: Fix spelling mistakes
Signed-off-by: Diego Biurrun <diego@biurrun.de>
2016-05-04 18:16:21 +02:00
Derek Buitenhuis f8e89d8a29 Merge commit 'fab8156b2f30666adabe227b3d7712fd193873b1'
* commit 'fab8156b2f30666adabe227b3d7712fd193873b1':
  avio: Copy URLContext generic options into child URLContexts

Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
2016-04-21 15:55:09 +01:00
Martin Storsjö fab8156b2f avio: Copy URLContext generic options into child URLContexts
Since all URLContexts have the same AVOptions, such AVOptions
will be applied on the outermost context only and removed from the
dict, while they probably make sense on all contexts.

This makes sure that rw_timeout gets propagated to the innermost
URLContext (to make sure it gets passed to the tcp protocol, when
opening a http connection for instance).

Alternatively, such matching options would be kept in the dict
and only removed after the ffurl_connect call.

Signed-off-by: Martin Storsjö <martin@martin.st>
2016-03-24 10:34:19 +02:00
Derek Buitenhuis 93629735d7 avformat: Add a protocol blacklisting API
Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
2016-03-04 16:13:42 +00:00
Derek Buitenhuis 9c75148e6e Merge commit '2758cdedfb7ac61f8b5e4861f99218b6fd43491d'
This commit also disables the async fate test, because it
used internal APIs in a non-kosher way, which no longer
exists.

* commit '2758cdedfb7ac61f8b5e4861f99218b6fd43491d':
  lavf: reorganize URLProtocols

Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
2016-02-29 16:51:10 +00:00
Anton Khirnov 8c0ceafb0f urlprotocol: receive a list of protocols from the caller
This way, the decisions about which protocols are available for use in
any given situations can be delegated to the caller.
2016-02-22 11:45:31 +01:00
Anton Khirnov 2758cdedfb lavf: reorganize URLProtocols
Instead of a linked list constructed at av_register_all(), store them
in a constant array of pointers.

Since no registration is necessary now, this removes some global state
from lavf. This will also allow the urlprotocol layer caller to limit
the available protocols in a simple and flexible way in the following
commits.
2016-02-22 11:30:58 +01:00
Michael Niedermayer fe3fed0b14 Update demuxers and protocols for protocol whitelist support
Reviewed-by: Andreas Cadhalpun <andreas.cadhalpun@googlemail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-02-02 04:16:50 +01:00
Hendrik Leppkes 99f2a56388 Merge commit '64f8c439fd663fec4d57ac21af572d498fe21f7a'
* commit '64f8c439fd663fec4d57ac21af572d498fe21f7a':
  rtmpproto: Include the full path as app when "slist=" is found

Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
2016-01-01 17:21:32 +01:00
Martin Storsjö 64f8c439fd rtmpproto: Include the full path as app when "slist=" is found
This matches what librtmp does. This fixes automatic url parsing of
crunchyroll urls.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-12-13 23:23:06 +02:00
Hendrik Leppkes 7ac4140c07 Merge commit 'e55376a1fd5abebbb0a082aa20739d58c2260a37'
* commit 'e55376a1fd5abebbb0a082aa20739d58c2260a37':
  rtmpproto: Write correct flv packet sizes at the end of packets

Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
2015-10-14 22:55:55 +02:00
Michael Niedermayer e55376a1fd rtmpproto: Write correct flv packet sizes at the end of packets
In one case it was written as zero, one case left it uninitialized,
missed the 11 bytes for the flv header.

Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2015-10-14 14:35:33 +02:00
Michael Niedermayer 94d50b5d00 avformat/rtmpproto: Fix 2 more cases of the 2nd packet size being wrong
This should fix RTMP input which was broken by cbbd906be6
the 40 + 11 case is untested as it did not occur in the testcase

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2015-10-02 02:16:14 +02:00
Michael Niedermayer e01ad950bb avformat/rtmpproto: Fix 2nd packet size
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2015-09-16 03:43:21 +02:00
James Almer 9487ffd4c0 rtmpproto: free hmac context properly
Signed-off-by: James Almer <jamrial@gmail.com>
Signed-off-by: Martin Storsjö <martin@martin.st>
2015-07-30 09:26:49 +03:00
James Almer 6ce3d9fc4a avformat/rtmpproto: free hmac context properly
Signed-off-by: James Almer <jamrial@gmail.com>
2015-07-29 23:56:22 -03:00
James Almer 65dd6a1f84 rtmpproto: use AVHMAC instead of a custom implementation
Signed-off-by: James Almer <jamrial@gmail.com>
Signed-off-by: Martin Storsjö <martin@martin.st>
2015-07-29 22:09:16 +03:00
James Almer 6c87b86628 avformat/rtmpproto: use AVHMAC instead of a custom implementation
Reviewed-by: Michael Niedermayer <michael@niedermayer.cc>
Signed-off-by: James Almer <jamrial@gmail.com>
2015-07-29 15:32:08 -03:00
Paul B Mahol 5165c600eb avformat/rtmpproto: increase hardcoded url/path lengths
Fixes #4103.

Signed-off-by: Paul B Mahol <onemda@gmail.com>
2015-07-01 20:03:26 +00:00
Michael Niedermayer 40d552dae6 Merge commit '1a3eb042c704dea190c644def5b32c9cee8832b8'
* commit '1a3eb042c704dea190c644def5b32c9cee8832b8':
  Replace av_dlog with normal av_log at trace level

Conflicts:
	ffplay.c
	libavdevice/fbdev_dec.c
	libavfilter/avfilter.c
	libavfilter/internal.h
	libavfilter/setpts.c
	libavfilter/src_movie.c
	libavfilter/vf_crop.c
	libavfilter/vf_drawtext.c
	libavfilter/vf_fieldorder.c
	libavformat/assdec.c
	libavformat/avidec.c
	libavformat/flvdec.c
	libavformat/http.c
	libavformat/ipmovie.c
	libavformat/isom.c
	libavformat/mov.c
	libavformat/mpegenc.c
	libavformat/mpegts.c
	libavformat/mpegtsenc.c
	libavformat/mux.c
	libavformat/mxfdec.c
	libavformat/nsvdec.c
	libavformat/oggdec.c
	libavformat/r3d.c
	libavformat/rtspdec.c
	libavformat/utils.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-04-20 03:19:47 +02:00
Vittorio Giovara 1a3eb042c7 Replace av_dlog with normal av_log at trace level
This applies to every library where performance is not critical.
2015-04-19 12:41:59 +01:00
Michael Niedermayer 03b84f2fb2 avformat/rtmpproto: Use av_freep() to avoid leaving stale pointers in memory
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2014-12-22 12:03:36 +01:00