I have one Flash player (only SWF file, no sources) that we use on our intranet project to play RTMP streams. Today I'm stuck with new RTMP URL that could not be played with this player. At the same it easily played with MediaElements.js buit-in SWF-player. I wonder, what could it be?
I have only one clue: when I use rtmpdump, stream is loading only with --live
flag. But debug output is controversial for me. Since --live
flag only invoking FCSubscribe, then server answers that Method not found (FCSubscribe)
and now stream is starting.
Some rtmpdump
output.
Without --live
flag I get this:
DEBUG: Invoking createStream
DEBUG: RTMP_ClientPacket, received: invoke 29 bytes
DEBUG: (object begin)
DEBUG: Property: NULL
DEBUG: (object end)
DEBUG: HandleInvoke, server invoking <_result>
DEBUG: HandleInvoke, received result for method call <createStream>
DEBUG: SendPlay, seekTime=0, stopTime=1000, sending play: livestream_3
DEBUG: Invoking play
DEBUG: sending ctrl. type: 0x0003
DEBUG: HandleChangeChunkSize, received: chunk size change to 4096
DEBUG: RTMP_ClientPacket, received: invoke 185 bytes
DEBUG: (object begin)
DEBUG: Property: NULL
DEBUG: (object begin)
DEBUG: Property: <Name: level, STRING: error>
DEBUG: Property: <Name: code, STRING: NetStream.Play.StreamNotFound>
DEBUG: Property: <Name: description, STRING: Failed to play livestream_3; stream not found.>
DEBUG: Property: <Name: details, STRING: livestream_3>
DEBUG: Property: <Name: clientid, STRING: qAASQnAA>
DEBUG: (object end)
DEBUG: (object end)
DEBUG: HandleInvoke, server invoking <onStatus>
DEBUG: HandleInvoke, onStatus: NetStream.Play.StreamNotFound
ERROR: Closing connection: NetStream.Play.StreamNotFound
DEBUG: Closing connection.
With it I get this:
DEBUG: Invoking createStream
DEBUG: FCSubscribe: livestream_3
DEBUG: Invoking FCSubscribe
DEBUG: RTMP_ClientPacket, received: invoke 29 bytes
DEBUG: (object begin)
DEBUG: Property: NULL
DEBUG: (object end)
DEBUG: HandleInvoke, server invoking <_result>
DEBUG: HandleInvoke, received result for method call <createStream>
DEBUG: SendPlay, seekTime=0, stopTime=1000, sending play: livestream_3
DEBUG: Invoking play
DEBUG: sending ctrl. type: 0x0003
DEBUG: RTMP_ClientPacket, received: invoke 119 bytes
DEBUG: (object begin)
DEBUG: Property: NULL
DEBUG: (object begin)
DEBUG: Property: <Name: level, STRING: error>
DEBUG: Property: <Name: code, STRING: NetConnection.Call.Failed>
DEBUG: Property: <Name: description, STRING: Method not found (FCSubscribe).>
DEBUG: (object end)
DEBUG: (object end)
DEBUG: HandleInvoke, server invoking <_error>
ERROR: rtmp server sent error
DEBUG: HandleChangeChunkSize, received: chunk size change to 4096
DEBUG: HandleCtrl, received ctrl. type: 0, len: 6
DEBUG: HandleCtrl, Stream Begin 1
DEBUG: RTMP_ClientPacket, received: invoke 166 bytes
DEBUG: (object begin)
DEBUG: Property: NULL
DEBUG: (object begin)
DEBUG: Property: <Name: level, STRING: status>
DEBUG: Property: <Name: code, STRING: NetStream.Play.Reset>
DEBUG: Property: <Name: description, STRING: Playing and resetting livestream_3.>
DEBUG: Property: <Name: details, STRING: livestream_3>
DEBUG: Property: <Name: clientid, STRING: qAARQnAA>
DEBUG: (object end)
DEBUG: (object end)
DEBUG: HandleInvoke, server invoking <onStatus>
DEBUG: HandleInvoke, onStatus: NetStream.Play.Reset
DEBUG: RTMP_ClientPacket, received: invoke 160 bytes
DEBUG: (object begin)
DEBUG: Property: NULL
DEBUG: (object begin)
DEBUG: Property: <Name: level, STRING: status>
DEBUG: Property: <Name: code, STRING: NetStream.Play.Start>
DEBUG: Property: <Name: description, STRING: Started playing livestream_3.>
DEBUG: Property: <Name: details, STRING: livestream_3>
DEBUG: Property: <Name: clientid, STRING: qAARQnAA>
DEBUG: (object end)
DEBUG: (object end)
DEBUG: HandleInvoke, server invoking <onStatus>
DEBUG: HandleInvoke, onStatus: NetStream.Play.Start
Starting Live Stream
P.S. I'm not AS2/AS3 developer, so I'm not to familiar with all RTMP-like things in Flash.