Great Go code first of all!
However, it is hard to implement Play within current code architecture. The server is basically setup to be a passive handler. For example, after a rtmp player sends out play command and gets back the play succeed response. It sits there and waits for server to send video and audio chunks. But in server_data_play_handler.go, it is still waiting for message send from client. How could we write a play function that fits nicely in current architecture?