- rtmp2sink: Should look into reconnecting and resuming stream without deleting and recreating stream, which drops clients. - Move AMF parser/serializer to GstRtmpMeta? - Move AMF nodes from g_slice to GstMiniObject? - First video frame that comes from Wowza seems to be out-of-order; librtmp does not have this problem - Refactor connection, pull out the ad-hoc read and write handling and put it with the chunk layer into GBuffered{In,Out}putStream subclasses - Refactor elements and pull out the common connection+mainloop handling code into a context object - Change the location properties into something with less boilerplate? Perhaps a GstStructure-based prop, custom GValue transforms or GstValue (de)serializing - Use glib-mkenums to generate GEnumClasses - Post-connect onStatus handling (needed for src EOS and async errors?) - Better mux/demux, at the cost of losing compatibility with flvmux/demux. Something like (a/x = application/x-rtmp-messages): rtmp2src ! a/x ! rtmp2demux ! a/x,type=video ! rtmp2videodecode ! h264parse ! a/x,type=audio ! rtmp2audiodecode ! aacparse x264enc ! rtmp2videoencode ! a/x,type=video ! rtmp2mux ! a/x ! rtmp2sink fdkaacenc ! rtmp2audioencode ! a/x,type=audio ! And also, in case no muxing is required: x264enc ! rtmp2videoencode ! a/x,type=video ! rtmp2sink fdkaacenc ! rtmp2audioencode ! a/x,type=video ! rtmp2sink Proper GstBuffer timestamps need proper timestamp wraparound handling - Better client element, which generalizes the existing sink/src to allow multiple streams over one connection - Request src pad to play a stream - Request sink pad to publish a stream (base it on GstAggregator?) - rtmp2sink/src just specialize the client element with a static pad - Server implementation - Support more protocols - rtmpe (App-layer encryption) - rtmpt (HTTP tunneling) - rtmpte (HTTP tunneling + App-layer encryption) - rtmpts (HTTPS tunneling) - rtmfp (UDP) Needed testing: - AMF parsing - connection closure by peer - connection timeouts