rtmpproto: Only prepend @setDataFrame for onMetaData and |RtmpSampleAccess
authorMartin Storsjö <martin@martin.st>
Mon, 24 Nov 2014 08:51:46 +0000 (10:51 +0200)
committerMartin Storsjö <martin@martin.st>
Fri, 28 Nov 2014 07:59:29 +0000 (09:59 +0200)
commit01eac895ab350027467ffbe7278740f89ae8be75
tree32ad497019e61869ea0ebcc8c6742893fa467d7c
parent44127b157e9f8acb837d4bb3a094f56b40da3ef5
rtmpproto: Only prepend @setDataFrame for onMetaData and |RtmpSampleAccess

Currently, when streaming to an RTMP server, any time a packet of type
RTMP_PT_NOTIFY is encountered, the packet is prepended with @setDataFrame
before it gets sent to the server. This is incorrect; only packets for
onMetaData and |RtmpSampleAccess should invoke @setDataFrame on the RTMP
server. Specifically, the current bug manifests itself when trying to
stream onTextData or onCuePoint invocations.

This fix addresses that problem and ensures that the @setDataFrame is
only prepended for onMetaData and |RtmpSampleAccess.

Since data is fed to the rtmp_write function in smaller pieces (depending
on the calling IO buffer size), we can't generally assume that the
whole packet (or even the whole command string) is available at once,
therefore we can only check the command string once the full packet
has been transferred to us for sending.

Based on a patch by Jeffrey Wescott.

Signed-off-by: Martin Storsjö <martin@martin.st>
libavformat/rtmpproto.c