1 - rtmp2sink: Should look into reconnecting and resuming stream without
2 deleting and recreating stream, which drops clients.
4 - Move AMF parser/serializer to GstRtmpMeta?
5 - Move AMF nodes from g_slice to GstMiniObject?
7 - First video frame that comes from Wowza seems to be out-of-order; librtmp
8 does not have this problem
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
13 - Refactor elements and pull out the common connection+mainloop handling code
16 - Change the location properties into something with less boilerplate?
18 Perhaps a GstStructure-based prop, custom GValue transforms or GstValue
21 - Use glib-mkenums to generate GEnumClasses
23 - Post-connect onStatus handling (needed for src EOS and async errors?)
25 - Better mux/demux, at the cost of losing compatibility with flvmux/demux.
27 Something like (a/x = application/x-rtmp-messages):
29 rtmp2src ! a/x ! rtmp2demux ! a/x,type=video ! rtmp2videodecode ! h264parse
30 ! a/x,type=audio ! rtmp2audiodecode ! aacparse
32 x264enc ! rtmp2videoencode ! a/x,type=video ! rtmp2mux ! a/x ! rtmp2sink
33 fdkaacenc ! rtmp2audioencode ! a/x,type=audio !
35 And also, in case no muxing is required:
37 x264enc ! rtmp2videoencode ! a/x,type=video ! rtmp2sink
38 fdkaacenc ! rtmp2audioencode ! a/x,type=video ! rtmp2sink
40 Proper GstBuffer timestamps need proper timestamp wraparound handling
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
48 - Server implementation
50 - Support more protocols
51 - rtmpe (App-layer encryption)
52 - rtmpt (HTTP tunneling)
53 - rtmpte (HTTP tunneling + App-layer encryption)
54 - rtmpts (HTTPS tunneling)
61 - connection closure by peer