| 1768 | static CommandHandlerMap* s_cmd_handlers = NULL; |
| 1769 | static pthread_once_t s_cmd_handlers_init_once = PTHREAD_ONCE_INIT; |
| 1770 | static void InitCommandHandlers() { |
| 1771 | // Dispatch commands based on "Command Name". |
| 1772 | s_cmd_handlers = new CommandHandlerMap; |
| 1773 | if (s_cmd_handlers->init(64, 70) != 0) { |
| 1774 | LOG(WARNING) << "Fail to init s_cmd_handlers"; |
| 1775 | } |
| 1776 | (*s_cmd_handlers)[RTMP_AMF0_COMMAND_CONNECT] = &RtmpChunkStream::OnConnect; |
| 1777 | (*s_cmd_handlers)[RTMP_AMF0_COMMAND_ON_BW_DONE] = &RtmpChunkStream::OnBWDone; |
| 1778 | (*s_cmd_handlers)[RTMP_AMF0_COMMAND_RESULT] = &RtmpChunkStream::OnResult; |
| 1779 | (*s_cmd_handlers)[RTMP_AMF0_COMMAND_ERROR] = &RtmpChunkStream::OnError; |
| 1780 | (*s_cmd_handlers)[RTMP_AMF0_COMMAND_PLAY] = &RtmpChunkStream::OnPlay; |
| 1781 | (*s_cmd_handlers)[RTMP_AMF0_COMMAND_PLAY2] = &RtmpChunkStream::OnPlay2; |
| 1782 | (*s_cmd_handlers)[RTMP_AMF0_COMMAND_CREATE_STREAM] = &RtmpChunkStream::OnCreateStream; |
| 1783 | (*s_cmd_handlers)[RTMP_AMF0_COMMAND_DELETE_STREAM] = &RtmpChunkStream::OnDeleteStream; |
| 1784 | (*s_cmd_handlers)[RTMP_AMF0_COMMAND_CLOSE_STREAM] = &RtmpChunkStream::OnCloseStream; |
| 1785 | (*s_cmd_handlers)[RTMP_AMF0_COMMAND_PUBLISH] = &RtmpChunkStream::OnPublish; |
| 1786 | (*s_cmd_handlers)[RTMP_AMF0_COMMAND_SEEK] = &RtmpChunkStream::OnSeek; |
| 1787 | (*s_cmd_handlers)[RTMP_AMF0_COMMAND_PAUSE] = &RtmpChunkStream::OnPause; |
| 1788 | (*s_cmd_handlers)[RTMP_AMF0_COMMAND_ON_STATUS] = &RtmpChunkStream::OnStatus; |
| 1789 | (*s_cmd_handlers)[RTMP_AMF0_COMMAND_RELEASE_STREAM] = &RtmpChunkStream::OnReleaseStream; |
| 1790 | (*s_cmd_handlers)[RTMP_AMF0_COMMAND_FC_PUBLISH] = &RtmpChunkStream::OnFCPublish; |
| 1791 | (*s_cmd_handlers)[RTMP_AMF0_COMMAND_FC_UNPUBLISH] = &RtmpChunkStream::OnFCUnpublish; |
| 1792 | (*s_cmd_handlers)[RTMP_AMF0_COMMAND_GET_STREAM_LENGTH] = &RtmpChunkStream::OnGetStreamLength; |
| 1793 | (*s_cmd_handlers)[RTMP_AMF0_COMMAND_CHECK_BW] = &RtmpChunkStream::OnCheckBW; |
| 1794 | } |
| 1795 | |
| 1796 | bool RtmpChunkStream::OnMessage(const RtmpBasicHeader& bh, |
| 1797 | const RtmpMessageHeader& mh, |