[FFmpeg-devel] [PATCH] RTMPE support
Stefano Sabatini
stefano.sabatini-lala
Sun Mar 28 15:44:21 CEST 2010
On date Saturday 2010-03-27 23:28:44 -0700, Howard Chu encoded:
> Stefano Sabatini wrote:
> >On date Saturday 2010-03-27 00:13:26 -0700, Howard Chu encoded:
> >>Howard Chu wrote:
> >>>Kostya wrote:
> >>>>On Thu, Mar 25, 2010 at 09:06:51PM -0700, Howard Chu wrote:
> >>>>>+fail:
> >>>>>+ av_free(host);
> >>>>>+ av_free(playpath.av_val);
> >>>>
> >>>>Where are those allocated? And have you tested this path?
> >>>
> >>>In RTMP_ParseURL. Yes, this part is ugly, could be done differently. And yes,
> >>>it works here.
> >>
> >>I've moved the option parsing into librtmp, so none of these values
> >>are exposed now. This is better in the long run since RTMP is still
> >>a moving target and we're still revving new stuff into librtmp
> >>pretty frequently.
> >[...]
> >
> >So if I understood correctly the various "swfurl", "pageurl", etc
> >parameters are directly specified in the filename?
>
> >Can you say how they need to be specified?
>
> Yes, like the example at the bottom of this message:
>
> http://lists.mplayerhq.hu/pipermail/mplayer-dev-eng/2010-March/063988.html
>
> Values containing spaces will need to be URLencoded.
>
> Compare the set of options I originally implemented here http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/2010-March/085026.html
> (just 8 keywords)
>
> with the complete set in librtmp here
> http://lists.mplayerhq.hu/pipermail/rtmpdump/2010-March/000708.html
> (17 keywords)
>
> >>+#include "libavcodec/opt.h"
> >
> >Not anymore required.
>
> OK, fixed.
>
> >>+ switch(av_log_get_level()) {
> >>+ default:
> >>+ case AV_LOG_FATAL:
> >>+ rc = RTMP_LOGCRIT; break;
> >>+ case AV_LOG_ERROR:
> >>+ rc = RTMP_LOGERROR; break;
> >>+ case AV_LOG_WARNING:
> >>+ rc = RTMP_LOGWARNING; break;
> >>+ case AV_LOG_INFO:
> >>+ rc = RTMP_LOGINFO; break;
> >>+ case AV_LOG_VERBOSE:
> >>+ rc = RTMP_LOGDEBUG; break;
> >>+ case AV_LOG_DEBUG:
> >>+ rc = RTMP_LOGDEBUG2; break;
> >
> >These can be put on one line and vertically aligned, should help
> >readability.
>
> OK.
>
> >>+static int rtmp_read(URLContext * s, uint8_t * buf, int size)
> >
> >Nit: please use consistently TYPE *VAR rather than TYPE * VAR, here
> >and below.
>
> OK. (cruft from running indent without specifying all typedefs...)
>
> >>+static int64_t rtmp_seek(URLContext * s, int stream_index,
> >>+ int64_t timestamp, int flags)
> >>+{
> >>+ RTMP *r = s->priv_data;
> >>+
> >>+ if (flags& AVSEEK_FLAG_BYTE)
> >>+ return AVERROR(ENOTSUP);
> >
> >As I'm now an expert of error codes, I can say this is not very
> >correct:
> >http://www.opengroup.org/onlinepubs/000095399/functions/xsh_chap02_03.html
> >[ENOTSUP]
> > Not supported. The implementation does not support this feature of the Realtime Option Group.
> >
> >Please use AVERROR_NOTSUPP instead (but there is still discussion
> >about the real meaning of that error code).
>
> OK.
>
> >>+ /* seeks are in milliseconds */
> >>+ timestamp = av_rescale(timestamp, AV_TIME_BASE, 1000);
> >>+ if (!RTMP_SendSeek(r, timestamp))
> >>+ return -1;
> >>+ return timestamp;
> >>+}
> >>+
> >>+URLProtocol rtmp_protocol = {
> >>+ "rtmp",
> >>+ rtmp_open,
> >>+ rtmp_read,
> >>+ rtmp_write, /* write */
> >>+ NULL, /* seek */
> >>+ rtmp_close,
> >>+ NULL, /* next */
> >>+ rtmp_pause,
> >>+ rtmp_seek
> >>+};
> >
> >The " /* write */" here and below is slightly confusing, as it is
> >indeed implemented, while the "/* seek */" and "/* next */" are
> >evidently useful for indicating which are the not
> >implemented/implementable features.
>
> I hadn't implemented write in the first version of the patch, and
> just left the comment after implementing it. Anyway, cleaned up now.
>
> Along those lines I have a question - who uses the get_file_handle()
> hook? Presumably the only safe thing to do with it is with select()
> or some other event loop code. Is it important to implement this? I
> haven't found any code that uses it. (I've added it this time
> around.)
> >
> >Thanks for your work, regards.
>
> Thanks for the review.
[...]
OKed by Kostya on IRC and applied.
--
FFmpeg = Fabulous Funny Most Portable Elitarian Gadget
More information about the ffmpeg-devel
mailing list