1- rtmp2sink: Should look into reconnecting and resuming stream without 2 deleting and recreating stream, which drops clients. 3 4- Move AMF parser/serializer to GstRtmpMeta? 5- Move AMF nodes from g_slice to GstMiniObject? 6 7- First video frame that comes from Wowza seems to be out-of-order; librtmp 8 does not have this problem 9 10- Refactor connection, pull out the ad-hoc read and write handling and put it 11 with the chunk layer into GBuffered{In,Out}putStream subclasses 12 13- Refactor elements and pull out the common connection+mainloop handling code 14 into a context object 15 16- Change the location properties into something with less boilerplate? 17 18 Perhaps a GstStructure-based prop, custom GValue transforms or GstValue 19 (de)serializing 20 21- Use glib-mkenums to generate GEnumClasses 22 23- Post-connect onStatus handling (needed for src EOS and async errors?) 24 25- Better mux/demux, at the cost of losing compatibility with flvmux/demux. 26 27 Something like (a/x = application/x-rtmp-messages): 28 29 rtmp2src ! a/x ! rtmp2demux ! a/x,type=video ! rtmp2videodecode ! h264parse 30 ! a/x,type=audio ! rtmp2audiodecode ! aacparse 31 32 x264enc ! rtmp2videoencode ! a/x,type=video ! rtmp2mux ! a/x ! rtmp2sink 33 fdkaacenc ! rtmp2audioencode ! a/x,type=audio ! 34 35 And also, in case no muxing is required: 36 37 x264enc ! rtmp2videoencode ! a/x,type=video ! rtmp2sink 38 fdkaacenc ! rtmp2audioencode ! a/x,type=video ! rtmp2sink 39 40 Proper GstBuffer timestamps need proper timestamp wraparound handling 41 42- Better client element, which generalizes the existing sink/src to allow 43 multiple streams over one connection 44 - Request src pad to play a stream 45 - Request sink pad to publish a stream (base it on GstAggregator?) 46 - rtmp2sink/src just specialize the client element with a static pad 47 48- Server implementation 49 50- Support more protocols 51 - rtmpe (App-layer encryption) 52 - rtmpt (HTTP tunneling) 53 - rtmpte (HTTP tunneling + App-layer encryption) 54 - rtmpts (HTTPS tunneling) 55 - rtmfp (UDP) 56 57Needed testing: 58 59- AMF parsing 60 61- connection closure by peer 62 63- connection timeouts 64