ASP.NET MVC рдкрд░ рд╕рд░рд▓ рд╡реАрдбрд┐рдпреЛ рдЪреИрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рд╢реБрдн рджрд┐рди, рд╕рдЬреНрдЬрдиреЛрдВ, рд╣рдмреНрд░рд╛рдпреБрдЬрд░реА!
рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ ASP.NET MVC рдкрд░ рд╕рд░рд▓ рд╡реАрдбрд┐рдпреЛ рдЪреИрдЯ рдмрдирд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдмрддрд╛рдКрдВрдЧрд╛ред

рд▓реЗрдХрд┐рди рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдкреГрд╖реНрдарднреВрдорд┐ред рд╣рдо рдЗрдВрдЯрд░рдиреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдбреЙрдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╡реАрдбрд┐рдпреЛ рдкрд░рд╛рдорд░реНрд╢ рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╕рд░реНрд╡рд░ рдФрд░ рдЪреИрдирд▓ рдХрд┐рддрдирд╛ рднрд╛рд░ рдЭреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рд╕реНрд░реЛрдд рдХреЛрдб рдФрд░ рд╡рд┐рд╡рд░рдг рд▓рд┐рдЦрд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЭреЗ рдЖрдкрдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛ рд░рд╣реА рд╣реИред
рдореВрд▓ рд╡рд┐рдЪрд╛рд░ рдЪреИрдЯ рдЪреИрдЯ рд╕реЗ рдЙрдзрд╛рд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: рдЖрдк рд╕рд╛рдорд╛рдиреНрдп рдЪреИрдЯ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╡реАрдбрд┐рдпреЛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрд╡рд╛рдж рдХрд░рддреЗ рд╣реИрдВред
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдПрдХ рдирд┐: рд╢реБрд▓реНрдХ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд codeplex.com рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реБрдЖ рд╣реИ , рдореБрдЭреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ / рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ / рд╕реБрдЭрд╛рд╡реЛрдВ рдкрд░ рдЦреБрд╢реА рд╣реЛрдЧреАред

So. рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ RTMP рдХреЛ рд╕рдмрд╕реЗ рдЖрдо рдЪреБрдирд╛ред RTMFP рдХреНрдпреЛрдВ рдирд╣реАрдВ? рдмрд╕ RTMFP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рд╕реНрдерд┐рд░ рдХрдиреЗрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдЬреЛ рдХрд┐ рднреБрдЧрддрд╛рди рдХрд┐рдП рдЧрдП рд╡реАрдбрд┐рдпреЛ рдкрд░рд╛рдорд░реНрд╢ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдФрд░ рдЖрдИрдбреА рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рд░реНрд╡рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реНрдерд┐рд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред рд╕рд░реНрд╡рд░ Wowza рдореАрдбрд┐рдпрд╛ рд╕рд░реНрд╡рд░ рд╣реИ , рдЬреИрд╕рд╛ рдХрд┐ рдирд┐рд╢реБрд▓реНрдХ Red5 рдХреЗ рд╡рд┐рдкрд░реАрдд (рдореБрдЭреЗ рдЙрд╕рдХреЗ рд╕рдорд░реНрдердХреЛрдВ рдХреЛ рдорд╛рдлрд╝ рдХрд░ рджреЗрдВ) рдЗрд╕рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрдкрд╖реНрдЯ рдкреНрд░рд▓реЗрдЦрди рд╣реИ, рдФрд░ рдПрдлрдПрдордПрд╕ рдХреЗ рд╡рд┐рдкрд░реАрдд , рдкрд░реАрдХреНрд╖рдг рдЕрд╡рдзрд┐ 30 рджрд┐рди рдФрд░ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдореВрд▓реНрдп рдиреАрддрд┐ рд╣реИред рдФрд░ рд╣рдо рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдХрд╛рдо рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ, рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рддреАрдиреЛрдВ рдХреЗ рдмреАрдЪ рдХреЛрдИ рдордЬрдмреВрдд рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИред рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдПрд░реНрд▓реАрд╡рд┐рдбрд┐рдпреЛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ , рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдЗрд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рджреЗрдЦрдиреЗ рдФрд░ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред

рд╕рдм рдХреБрдЫ ASP.NET MVC 4 рдХреЗ рддрд╣рдд рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдФрд░ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рдмреАрдЪ рдкрд╛рда рдЪреИрдЯ рдФрд░ рд╕рдВрдЪрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП, рд╕рд┐рдЧреНрдирд▓рдЖрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред

рдЕрдВрдХ рдкрд░ рдЖрдЧреЗред

рдЪреИрдЯ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред
рдпрд╣рд╛рдВ рдореБрдЦреНрдп рдмрд╛рдд рджреЛ рдЪреИрдЯрдореЗрд╕реЗрдЬ рдФрд░ рдЪреИрдЯ рдХреНрд▓рд╛рд╕реЗрд╕ рд╣реИрдВред
рдЪрд╛рдЯ рдХреНрд▓рд╛рд╕ рдХреЛ рд╕рд┐рдЧреНрдирд▓рдЖрд░ рд╕реЗ рдорд┐рд▓рд╛ рд╣реИред рд╣рдмреНрд╕рд╣рдм рдФрд░ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ:

//      . public void JoinRoom(string roomKey, string userName) { //          if (roomKey == C.MAIN_CHAT_GROUP) Store.Add(new User(Context.ConnectionId, userName)); //    id Clients[Context.ConnectionId].OnJoinRoom(Context.ConnectionId); //     Groups.Add(Context.ConnectionId, roomKey); //       UpdateUsers(); } //      public void Send(ChatMessage message) { // -       if (message.Content.Length > 0) { //   message.Date = DateTime.Now; //   message.SenderKey = Context.ConnectionId; //       message.Content = HttpUtility.HtmlEncode(message.Content); message.SenderName = HttpUtility.HtmlEncode(message.SenderName); //      Clients[message.RoomKey].OnSend(message); Store.SaveMessage(message); } } 


рдпрд╣рд╛рдВ рд╕реНрдЯреЛрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реНрдерд┐рд░ рд╕рдВрдЧреНрд░рд╣ рд╣реИ, рдЬрд┐рд╕реЗ рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рдбреЗрдореЛ рдореЗрдВ, рдЗрд╕реЗ рд╕реНрдЯреИрдЯрд┐рдХ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЗ рдмрдЬрд╛рдп рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╣рдо рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдЙрдкрдпреБрдХреНрдд рддрд░реАрдХреЗ рдмрдирд╛рддреЗ рд╣реИрдВред рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЫрд┐рдкрд╛рдпрд╛

 var CHAT = {}; var OPTIONS = {}; function Start(data) { //  ,  OPTIONS.SenderName = data.name; OPTIONS.RoomKey = 'MAIN'; CHAT = $.connection.chat; //   ,    CHAT.OnSend = OnSend; CHAT.OnJoinRoom = OnJoinRoom; } //       function OnJoinRoom(key) { OPTIONS.SenderKey = key; } //         function OnUpdateUsers(data) { /* ... ,  data  - User,     IUser */ } //    ,   Chat.Send function Send() { var messageInput = $("#msg"), //  ,      ChatMessage msg = { 'SenderName': OPTIONS.MyName, 'RoomKey': OPTIONS.RoomKey, 'Content': messageInput.val() }; CHAT.send(msg); //  :    -     messageInput.val(""); messageInput.focus(); } // ,       function OnSend(msg) { var chatContent = $(".chat_content"), msgClass = 'chat_message'; /* ...    ,  msg - ,     ChatMessage */ } 


рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ "рдХреЙрд▓" рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЪреИрдЯ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рдХреЙрд▓ рдХреА рд╢реБрд░реБрдЖрдд, рдЕрд╕реНрд╡реАрдХреГрддрд┐ рдФрд░ рдХреЙрд▓ рдХреА рд╕реНрд╡реАрдХреГрддрд┐ рдХреЛ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВред

 //   ( ) public void Call(string recieverKey, string senderKey, string senderName) { Clients[recieverKey].OnCall(senderKey, senderName); } //    public void RejectCall(string senderKey, string recieverKey, string recieverName) { Clients[senderKey].OnRejectCall(recieverKey, recieverName); } //   public void AcceptCall(string calleePulicKey, string calleeName, string myName) { string myKey = Guid.NewGuid().ToString().Replace("-", ""); string calleeKey = Guid.NewGuid().ToString().Replace("-", ""); string roomKey = Guid.NewGuid().ToString().Replace("-", ""); var model = new RoomModel { MyPublicKey = Context.ConnectionId, MyKey = myKey, MyName = myName, CalleePublicKey = calleePulicKey, CalleeKey = calleeKey, CalleeName = calleeName, RoomKey = roomKey }; //      Store.SaveRoomInfo(model); //   Clients[calleePulicKey].OnAcceptCall(false, roomKey); Clients[Context.ConnectionId].OnAcceptCall(true, roomKey); } 


рдХрд╛рд░реНрдп рдХреА рдпреЛрдЬрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: рдЬрдм рдПрдХ рдЧреНрд░рд╛рд╣рдХ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдВрдЬреЗрд▓реАрдирд╛) рджреВрд╕рд░реЗ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреАрдЯ), рдПрдВрдЬреЗрд▓рд┐рдирд╛ рдХреЙрд▓ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ рдкреЗрдЯреА рдХреА рдХреБрдВрдЬреА, рдЙрд╕рдХреА рдХреБрдВрдЬреА рдФрд░ рдЙрд╕рдХрд╛ рдирд╛рдо рджреЗрддрд╛ рд╣реИред рдкреАрдЯ, рд╣рдо рдПрдХ OnCall рдЕрдзрд┐рд╕реВрдЪрдирд╛ рднреЗрдЬрддреЗ рд╣реИрдВ, рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рд╣рдо рдЗрд╕реЗ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдВрдЬреЗрд▓реАрдирд╛ рд╕реЗ рдХреЙрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдкреЗрдЯреАрдП рдХреЙрд▓ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рд░рд┐рдЬреЗрдХреНрдЯ рдХреЙрд▓ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреЙрд▓рд░ рдХреА рдХреБрдВрдЬреА, рдЙрд╕рдХреА рдХреБрдВрдЬреА рдФрд░ рдЙрд╕рдХрд╛ рдирд╛рдо рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИред рд╣рдо рдПрдВрдЬреЗрд▓реАрдирд╛ рдХреЛ рдПрдХ OnRejectCall рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди рднреЗрдЬрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдПрдВрдЬреЗрд▓реАрдирд╛ рдХреЛ рдХреЙрд▓ рд░рд┐рдЬреЗрдХреНрд╢рди рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди рджрд┐рдЦрд╛рддреЗ рд╣реИрдВред
рдЕрдЧрд░ рдкреЗрдЯрд┐рдпрд╛ рдХреЛ рдХреЙрд▓ рдорд┐рд▓рддреА рд╣реИ, рддреЛ рд╡рд╣ рдПрдХреНрд╕реЗрдХреЙрд▓ рд╡рд┐рдзрд┐ рд╕реЗ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдирдП рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдФрд░ рджреЛрдиреЛрдВ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЪреИрдЯ рд░реВрдо рдХреА рдХреБрдВрдЬреА рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдлрд┐рд░ рд╣рдо рджреЛрдиреЛрдВ OnAcceptCall рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди рднреЗрдЬрддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд╕рд╛рде рдЖрд╡рд╢реНрдпрдХ рдХреБрдВрдЬрд┐рдпрд╛рдБ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдЕрдзрд┐рд╕реВрдЪрдирд╛ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░, рд╣рдо рдкреЗрдЯреАрдПрдо рдФрд░ рдПрдВрдЬреЗрд▓рд┐рдирд╛ рджреЛрдиреЛрдВ рдХреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЪреИрдЯ рдкреЗрдЬ рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

 function OnAcceptCall(isMy, roomKey) { document.location = '@Url.Action("Room", "Home")' + '?isMy=' + isMy + '&roomKey=' + roomKey; } 


рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЪреИрдЯ рдкреЗрдЬ рдкрд░, рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХреБрдВрдЬрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, USB рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рдФрд░ рдЯреЗрдХреНрд╕реНрдЯ рдЪреИрдЯ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдВред рдХрдХреНрд╖ рдкреГрд╖реНрда рдкрд░ рдкрд╛рда рдЪреИрдЯ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрд╕реА рдЪреИрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдмрд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдФрд░ рдХреЙрд▓ рдХреА рд╕реВрдЪреА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдЕрдЧрд▓рд╛, рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рдкрд░ рдЬрд╛рдПрдВред
рд╕рдВрдЪрд╛рд░ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░реАрдо рдмрдирд╛рдиреА рд╣реЛрдЧреА рдЬрд┐рд╕реЗ рд╣рдо рд╕рд░реНрд╡рд░ рдкрд░ "рдкреНрд░рдХрд╛рд╢рд┐рдд" рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрдВрдЯрд░рд▓реЙрдХрд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╕реНрдЯреНрд░реАрдо рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВрдЧреЗред рд╕рд░реНрд╡рд░ рдкрд░ рдзрд╛рд░рд╛рдПрдБ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ рд╕рд░реНрд╡рд░ рдХреЛ рдкреНрд░реЗрд╖рд┐рдд рдХреАрдЬрд╝ рджреНрд╡рд╛рд░рд╛ рдкрд╣рдЪрд╛рдиреА рдЬрд╛рддреА рд╣реИрдВред
рдЬрдм рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдкреЗрдЬ рд╕реЗ рдЪрд╛рдмреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдиреАрдп рдЪрд░реЛрдВ рдореЗрдВ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ рдФрд░ рдЯрд╛рдЗрдорд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╕рдВрдЪрд╛рд░ рд╕рддреНрд░ рдХреА рд╢реБрд░реБрдЖрдд рдФрд░ рдкреНрд░рдЧрддрд┐ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░реЗрдЧрд╛ред рд╕рд░реНрд╡рд░ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдиреЗ, рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдФрд░ рд╕реНрдЯреНрд░реАрдо рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рддреАрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 private function Connect():void { if (!isConnected && rtmpConnection == null) { //   rtmpConnection = new NetConnection(); rtmpConnection.connect(connectStr); //       rtmpConnection.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus_rtmpConnection); } isConnected = true; } private function StartPublish():void { //     nsPublish = new NetStream(rtmpConnection); nsPublish.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus_nsPublish); //     0 nsPublish.bufferTime = 0; //  nsPublish.publish(publishName); //     nsPublish.attachCamera(camera); nsPublish.attachAudio(microphone); isPublish = true; } private function StartSubscribe():void { // C       nsSubscribe = new NetStream(rtmpConnection); //     nsSubscribe.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus_nsSubscribe); //     0 nsSubscribe.bufferTime = 0; //    var volume:Number = sldrVolume.value / 100; var st:SoundTransform = new SoundTransform(volume); nsSubscribe.soundTransform = st; //    nsSubscribe.play(subscribeName); //     videoRemote.attachNetStream(nsSubscribe); isSubscribe = true; } 


рдЬрдм рдЯрд╛рдЗрдорд░ рдЪрд╛рд▓реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рд╕рд░реНрд╡рд░ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реИрдВ рдФрд░ рдкреНрд░рдХрд╛рд╢рди рдФрд░ рд╕рджрд╕реНрдпрддрд╛ рдзрд╛рд░рд╛рдУрдВ рдХреА рд╕реНрдерд┐рддрд┐ред рдФрд░ рд╕рднреА рдЬрд╛рдВрдЪреЛрдВ рдХреА рд╕рдлрд▓рддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЯреЙрдХ рдЯрд╛рдЗрдо рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ

 private function onTick_Timer(event:TimerEvent):void { if(!isConnected)//   { lblEndTime.text = "..."; Connect(); startTime = new Date(); } else { if(!isPublish && needPublish)//   { lblEndTime.text = "..."; StartPublish(); } if(!isSubscribe)//    { lblEndTime.text = "..."; StartSubscribe(); } if(isPublish && isSubscribe)//   ,    { var now:Date = new Date(); var toStart:TimeSpan = new TimeSpan(now.getTime() - startTime.getTime()); lblEndTime.text = toStart.getTotalMinutes() + ':' + toStart.getSeconds(); } } } 


рд╡рд╣ рд▓рдЧрднрдЧ рд╕рднреАред

рдЕрдВрддрд┐рдо рдШрдЯрдХ рдореАрдбрд┐рдпрд╛ рд╕рд░реНрд╡рд░ рд╣реИред
Wowza Media Server рдиреЗ рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рдмрдирд╛рдпрд╛ред рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рд╡рд┐рддрд░рдг рдХрд┐рдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ, рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ, рдорд╢реАрди рдкрд░ 1935 рд╡рд╛рдВ рдкреЛрд░реНрдЯ рдЦреЛрд▓реЗрдВ рдФрд░ рдпреВрдПрд╕рдмреА рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рдореЗрдВ рд╕рд░реНрд╡рд░ рдХрд╛ рдкрддрд╛ рд▓рд┐рдЦреЗрдВред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдЖрдк рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ RTMP: Red5, Adobe FlashMediaServer, erlyvideo рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рд░реНрд╡рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╣рдорд╛рд░реЗ рд▓рдХреНрд╖реНрдп:
1. рдкрддрд╛ рд▓рдЧрд╛рдПрдБ рдХрд┐ рд╣рдо рдПрдХ рд╕рд╛рде рдХрд┐рддрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рдВрдкреНрд░реЗрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЧреБрдгрд╡рддреНрддрд╛ рдЦреЛрдП рдмрд┐рдирд╛ рд╕рд╛рдордирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
2. рдмреЗрд╣рддрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд╕реБрдЭрд╛рд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
3. рд╢рд╛рдпрдж рд╕реБрд░рдХреНрд╖рд╛ рдЫреЗрдж рдорд┐рд▓ рдЬрд╛рдП

UPD: рдкрд░реАрдХреНрд╖рдг рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдСрдирд▓рд╛рдЗрди рдбреЗрдореЛ рдХреЗ рд▓рд┐рдВрдХ рдкреЛрд╕реНрдЯ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдП рдЧрдП рд╣реИрдВред
рдирддреАрдЬрддрди, рдореБрдЭреЗ рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣реЗрдмреНрд░рд╛рдлрд╝реЗрдХреНрдЯ рдкрд╛рд╕ рд╣реЛ рдЧрдпрд╛ред рд╕рд░реНрд╡рд░ рдиреЗ рдЕрдзрд┐рдХрддрдо рдЖрдзреЗ рд▓реЛрдб рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ред
рдХреБрдЫ рдирдВрдмрд░:
1. рд╕рдордп рдХреА рдкреНрд░рддрд┐ рдпреВрдирд┐рдЯ рд╡реАрдбрд┐рдпреЛ рдЪреИрдЯ рдореЗрдВ рдЕрдзрд┐рдХрддрдо рдХрд┐рддрдирд╛ рдерд╛ - 5 рд╕рддреНрд░ рдПрдХ рдорд┐рдирдЯ рдХреА рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реБрдП, рдЙрдирдореЗрдВ рд╕реЗ 4 рдПрдХ рдорд┐рдирдЯ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рддрдХ рдЪрд▓реЗ
2. рдХреБрд▓ рдХреЙрд▓ рдкреНрд░рдпрд╛рд╕ - 361
1) рдЗрди рдкреНрд░рдпрд╛рд╕реЛрдВ рдореЗрдВ, 30 рд╕реЗрдХрдВрдб рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓рд╛ - 174
2) 2 рдорд┐рдирдЯ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рддрдХ рдЪрд▓рдирд╛ - 38
3) рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ (рдкреВрд░рд╛ рд╕рдордп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛) - 62
3. рдЪреИрдЯ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ - 12347
1) рдЗрдирдореЗрдВ рд╕реЗ, рдореБрдЦреНрдп рдореЗрдВ - 11256
2) рд╡реНрдпрдХреНрддрд┐рдЧрдд рдореЗрдВ - 1125

рдореИрдВ рд▓реЛрдб рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рджреЗрддрд╛ рд╣реВрдВ!

Source: https://habr.com/ru/post/In154455/


All Articles