ÄÚÈÝ·¢²¼¸üÐÂʱ¼ä : 2026/8/15 17:27:18ÐÇÆÚÒ» ÏÂÃæÊÇÎÄÕµÄÈ«²¿ÄÚÈÝÇëÈÏÕæÔĶÁ¡£
ÁúÔ´ÆÚ¿¯Íø http://www.qikan.com.cn
»ùÓÚRtmpºÍHttpË«ÐÒéÁ÷ýÌåÊÓÆµµã²¥ÏµÍ³
×÷ÕߣºÍõÐñÅô
À´Ô´£º¡¶µçÄÔ֪ʶÓë¼¼Êõ¡·2011ÄêµÚ01ÆÚ
ÕªÒª£ºÔÚAsp.Net3.5¿ò¼Ü»ù´¡ÉϽáºÏActionscript3.0Éè¼Æ²¢ÊµÏÖÁËÁ÷ýÌåÊÓÆµµã²¥ÏµÍ³£¬²¢ÇÒͬʱ֧³ÖRtmpÐÒéºÍHttpÐÒéµÄÊÓÆµ´«Ê䣬Ïêϸ·ÖÎöÁËÁ½ÖÖÐÒéµÄµã²¥ÔÀí£¬¸Ä½øHttpÐÒéÊÓÆµ´«Êä¡£Õë¶ÔÊÓÆµµã²¥Éè¼ÆÁËÒ»ÖÖеĸºÔؾùºâ·½·¨·ÖÁ÷ÊÓÆµÇëÇ󣬼æ¹ËÊÓÆµÊý¾Ý´«Êä¾àÀëºÍ·þÎñÆ÷¸ºÔØÐÔÄÜ£¬±£Ö¤Á÷³©²¥·Å¡£ ¹Ø¼ü´Ê£ºÁ÷ýÌ壻Rtmp£»¸ºÔؾùºâ
ÖÐͼ·ÖÀàºÅ£ºTP37 ÎÄÏ×±êʶÂ룺AÎÄÕ±àºÅ£º1009-3044(2011)01-226-03 Streaming Video on Demand System on Rtmp and Http Protocols WANG Xu-peng
(College of Electronics and Information Engineering, Tongji University, Shanghai 201804, China) Abstract: Design and implement streaming video on demand system which uses Asp.Net 3.5 framework and Actionscript3.0. The System supports both Rtmp protocol and Http protocol transmission, detailed analyze the vod principal of two protocols, improve the Http protocol
transmission. For vod, introduce a new load balancing method to distribute video Requisitions. It
considers both video data transmission distance and server load performance to ensure smooth playing. Key words: streaming media; rtmp; load balancing
ÍøÂç¼¼ÊõºÍͨÐż¼ÊõµÄ·¢Õ¹£¬ÍØ¿íÁËÍøÂç´ø¿í£¬Í¬Ê±Ò²¸ü¼Ó·á¸»ÁËÍøÂçÓ¦Óá£ÊÓÆµµã²¥ÍøÕ¾£¬ÍøÉϽÌѧÕýÔÚ³ÉΪеÄÍøÂç³è¶ù¡£±¾ÎÄÕýÊÇÉè¼ÆºÍʵÏÖÁË»ùÓÚÁ÷ýÌå¼¼ÊõµÄҽѧ½ÌѧÊÓÆµµã²¥ÏµÍ³£¬ÏµÍ³ÊÇÏÂÒ»´ú»¥ÁªÍøµÄҽѧ½Ìѧ¿ÆÑÐÆ½Ì¨µÄ×ÓÏîÄ¿,Ϊ¸÷¸ßУʦÉúÌṩ½Ìѧ·þÎñ¡£ 1 Á÷ýÌå¼ò½é
Á÷ýÌå¼¼ÊõÖ÷ÒªÊǽ«ÉùÒô£¬Ó°Ïñ£¬¶¯»µÈÊý¾Ý·Ö³ÉÒ»¸ö¸öѹËõ°ü£¬ÏòÓû§ÌṩÁ¬ÐøµÄ£¬ÊµÊ±µÄ´«²¥£¬¶ø²»±ØµÈµ½Õû¸öÊÓÆµÎļþÏÂÔØÍê³É²ÅÄܹۿ´¡£Í¨¹ý»º´æ¼¼ÊõÌṩÁ÷³©µÄÊÓÆµ²¥·Å£¬²¢ÇÒ´ó´óËõ¶ÌÁ˲¥·ÅÑÓ³Ù£¬¸ÄÉÆÓû§ÌåÑé¡£Á÷ýÌåµÄ´«Ê䷽ʽÖ÷ÒªÓÐ˳ÐòÁ÷ʽ´«ÊäºÍʵʱÁ÷ʽ´«Êä¡£
ÁúÔ´ÆÚ¿¯Íø http://www.qikan.com.cn
˳ÐòÁ÷ʽ´«Êä¹ËÃû˼ÒåÔÚÁ¬½Ó½¨Á¢ºó£¬·þÎñÆ÷»á°´ÕÕÊý¾ÝÔÚÊÓÆµÎļþÖдæ·ÅµÄ´ÎÐò˳Ðò·¢Ë͸ø¿Í»§¶Ë£¬²»»á¶ÔÊý¾Ý×ö¶îÍâµÄ´¦Àí£¬¶øÇÒÕâÖÖ´«ÊäÈç¹û²»¼ÓÏÞÖÆµÄ»°²ÉÓõÄÊÇÒ»ÖÖ¾¡Á¦½»¸¶µÄ·½Ê½¡£ÓÉÓÚ˳ÐòÁ÷ʽ´«ÊäʵÏÖ¼òµ¥£¬´«ÊäÐÒé²ÉÓÃHttpÐÒé¼´¿É£¬ÊÓÆµÎļþ·ÅÔÚweb·þÎñÆ÷£¬²»ÐèҪרÃŵÄÁ÷ýÌå·þÎñÆ÷Ö§³Ö£¬ÍøÕ¾ºÍÊÓÆµÍêÈ«¿ÉÒÔ¼¯³ÉÔÚÒ»Æð¡£
ʵʱÁ÷ʽ´«ÊäÒªÇóÊý¾Ý´«ÊäºÍÓû§²¥·ÅÊÇͬ²½µÄ£¬ÊÓÆµ¿ÉÒÔʵʱµØ±»¹Û¿´¡£·þÎñÆ÷¶ÔÓÚÊý¾Ý»á·Ö³ÉÊÓÆµºÍÒôƵ×ö¶îÍâµÄ´¦Àí£¬Òò´ËÐèÒªÌØ¶¨µÄÁ÷ýÌå·þÎñÆ÷Ö§³Ö£¬ÈçRealServer£¬Windows Media Server¡£±¾ÎÄʵʱÁ÷ʽ´«ÊäÐÒé²ÉÓÃRtmp£¬Á÷ýÌå·þÎñÆ÷ΪRed5¡£ 2 Á÷ýÌåµã²¥½â¾ö·½°¸ 2.1 Á÷ýÌåµã²¥¼Ü¹¹
Õû¸öҽѧ½ÌѧÊÓÆµµã²¥ÏµÍ³²ÉÓÃAsp.Net3.5¿ò¼Ü¿ª·¢Íê³É£¬ÊµÏÖ»ùÓÚRtmpºÍHttpÐÒéÁ½ÖÖ´«Ê䷽ʽ¡£·þÎñÆ÷°üÀ¨¾²Ì¬·þÎñÆ÷Nginx£¬¶¯Ì¬ÄÚÈÝ·þÎñÆ÷IIS7.0£¬Rtmp·þÎñÆ÷Red5¡£ NginxÊÇÒ»¿î¸ßÐÔÄÜweb·þÎñÆ÷£¬¹¹½¨ÓÚ×îеÄlinux2.6ÄÚºËÖ®ÉÏ£¬²ÉÓÃepollģʽÀ´´¦Àí´ó¹æÄ£µÄ²¢·¢Á¬½Ó£¬²¢¿ÉÒÔÅäÖÃʹÓÃ×îеÄNPTLÏ߳̿⣬´«ÊäЧÂʲ»»áËæ×ÅÁ¬½ÓµÄÏßÐÔÔö³¤¶øÏ½µ£¬Ïà±ÈÓÚÆäËü·þÎñÆ÷ÄÚ´æÕ¼Óü«Ð¡¡£NginxÖ÷ÒªÓÃÓÚ´¦Àí¾²Ì¬Ò³ÃæºÍ×÷Ϊ·´Ïò´úÀí·þÎñÆ÷£¬¶ÔÓÚ¶¯Ì¬Ò³ÃæºÍÊÓÆµÎļþµÄÇëÇóת·¢¸øIIS7.0´¦Àí¡£ÕâÑù¼È¼Ó¿ìÁ˾²Ì¬ÄÚÈݵĴ¦ÀíËÙ¶È£¬ÓÖ±£»¤Á˺ǫ́Êý¾Ý¿âµÄ°²È«¡£
IIS7.0¶ÔÓÚËùÓеÄÇëÇóÔÚ½øÈëHttpRuntimeʱ£¬¶¼»á¾¹ýһϵÁÐ×¢²áµÄModule½øÐйýÂË£¬×îºó¶ÔÓÚÌØ¶¨µÄÇëÇó½»ÓÉÖ¸¶¨µÄHandle´¦Àí¡£ÏµÍ³ÖÐͨ¹ýÅäÖÃWebConfigÎļþ£¬½«»ùÓÚHttpÐÒéFLVÎļþµÄÇëÇóÓ³É䏸FLVHandler£¬¸ÃÀà±ØÐëʵÏÖ½Ó¿ÚIHttpHandeler¡£
Red5ÊÇÒ»¿î¿ªÔ´·þÎñÆ÷£¬Í¨¹ý¶ÔÊý¾Ý°ü½øÐÐÄæÏò¹¤³ÌµÄÑо¿´Ó¶øÊµÏÖÁËRtmpÐÒé¡£Ö÷Òª¹¦ÄÜÊÇ´¦Àí¶ÔÓÚÁ÷ýÌåÊÓÆµµÄÇëÇ󣬴ÓFLVÎļþÖÐÌáÈ¡³öÊÓÆµºÍÒôƵ£¬²¢½«Æä´ò°ü³ÉÏûÏ¢£¬ÔÚͬһÁ¬½ÓÉÏ´«Ê䲻ͬµÄÁ÷£¬²¢Ö§³Ö¿Í»§¶ËÔڵ㲥ʱµÄ¸÷ÖÖ²Ù×÷ÃüÁîÏìÓ¦¡£
Flash²¥·ÅÆ÷ÓÉActionScript3.0±àд£¬ÊµÏÖRtmpºÍHttpÁ½ÖÖÐÒéµÄÊÓÆµÇëÇóºÍ²¥·Å£¬ÏµÍ³Ìṩ¸øÓû§ÉÏÊöÁ½Öֵ㲥·½°¸¡£Õû¸ö²¥·ÅÆ÷×÷ΪSWFÎļþǶÈëµ½webä¯ÀÀÆ÷ÖУ¬Óû§Ö»Ðè´ò¿ªÍøÒ³±ã¿É¹Û¿´ÊÓÆµ£¬ÎÞÐèÏÂÔØ²¥·ÅÆ÷¡£ ϵͳͨÐÅÁ÷³ÌͼÈçͼ1¡£
ÊÓÆµÎļþͳһΪFLV¸ñʽ£¬FLV×÷ΪĿǰ×îÁ÷ÐеÄÁ÷ýÌåÊÓÆµ¸ñʽ£¬ÆäÐγÉÎļþС£¬½á¹¹¼òµ¥£¬·Ç³£ÊʺÏÍøÂç´«Êä¡£FLVÎļþÖ÷ÒªÓÉÒ»¸öÎļþÍ·ºÍÐí¶àTag×é³É£¬TagÀàÐÍÖ÷Òª·ÖΪÊÓÆµÁ÷£¬ÒôƵÁ÷ºÍ½Å±¾Á÷¡£ÓÉÓÚÊÓÆµÐÅÏ¢ºÍÒôƵÐÅÏ¢²ÉÓ÷ֿª´æ·ÅµÄ·½Ê½£¬ËùÒÔTagÖÐÐèÒªTimestapÈ·±£ÊÓÆµºÍÒôƵͬ²½¡£TagÖеÄÊý¾ÝÇø»áÖ¸Ã÷¸ÃTagµÄ±àÂëÀà¡£FLVÎļþ¸ñʽÈç±í1¡£
ÁúÔ´ÆÚ¿¯Íø http://www.qikan.com.cn
2.2 RtmpÐÒé²¥·ÅÔÀí
RtmpÐÒéÌṩÁËÁ÷ýÌåÊÓÆµµÄ¸ßЧÂÊ´«Ê䣬¿ÉÒÔ¹¹¼ÜÔÚTcpÐÒéÖ®ÉÏ¡£¿Í»§¶ËÓë·þÎñÆ÷ά³Ö×ÅÒ»¸öµ¥Ò»ÓÀ¾ÃµÄÁ¬½Ó£¬Ö§³Öʵʱ½»Á÷¡£RtmpÖ÷ҪΪ¶àýÌåÊÓÆµÌṩ¶à·´«ÊäºÍÊý¾Ý·Ö°ü·þÎñ£¬²»½öÖ§³ÖÊÓÆµºÍÒôƵÊý¾Ýʵʱ´«Ê䣬»¹Ö§³ÖRPC£¨Ô¶³Ì¹ý³Ìµ÷Óã©¡£ÊÓÆµ£¬ÒôƵ£¬²Ù×÷ÃüÁ¹²Ïí¶ÔÏ󣬿ØÖÆÏûÏ¢ºÍÆäËüÀàÐÍÊý¾Ý±»´ò°ü³ÉÒ»¸ö¸öÏûÏ¢£¬²¢´òÉÏʱ¼ä´ÁÓÃÓÚͬ²½£¬²»Í¬ÀàÐ͵ÄÏûÏ¢ÔÚ²»Í¬Á÷ÉÏ´«Ê䣬¶à¸öÏûÏ¢Á÷ÓÖ½»´í¸´ÓÃÔÚͬһ¸öÁ¬½ÓÉÏ¡£ÏûÏ¢°üÀ¨MessageÍ·ºÍMessageÖ÷Ìå¡£MessageÍ·¸ñʽÈç±í2¡£
Message Stream IdÖ÷ÒªÓÃÓÚÔÚµ¥Ò»Á¬½ÓÖÐʶ±ð²»Í¬µÄÁ÷£¬°üÀ¨3¸ö×Ö½Ú¡£Meaasge TypeÓÃÓÚÖ¸Ã÷ÏûÏ¢µÄÀàÐÍ£¬Ö»ÓÐÒ»¸ö×Ö½Ú¡£ÀàÐÍ1-7±£Áô£¬ÓÃÓÚ´«Êä¿ØÖÆÏûÏ¢£¬±ÈÈçÉèÖÃchunk´óС£¬ÏûÏ¢¶ªÆú£¬Óû§¿ØÖÆÏûÏ¢µÈµÈ¡£ËäȻͨ¹ýÉèÖÃMessage Type¿ÉÒÔ½«²»Í¬ÀàÐ͵ÄÏûÏ¢ÔÚ²»Í¬µÄÁ÷ÉÏ´«Ê䣬µ«MessageÒ²ÓÐÆäȱµã£¬Òò´ËÓÖ½«Æä·Ö¸î³ÉChunk¡£·Ö¿é¿ÉÒÔ½«µÍÓÅÏȼ¶Êý¾ÝÁ¿´óµÄMessag·Ö¸î³ÉСµÄChunk£¬·ÀÖ¹Æä×èÈûÓÅÏȼ¶¸ßÊý¾ÝÁ¿Ð¡µÄMessage¡£Á÷ýÌå´«ÊäµÄ¶à·¸´ÓûùÓÚMessageÕâÒ»²ã£¬ÓëChunkÎ޹ء£
RtmpÔÚ½¨Á¢Á¬½ÓʱÊ×ÏÈÒª½øÐÐ3´ÎÎÕÊÖ£¬ÀàËÆÓÚTcpÐÒ飬²»¹ýÊÇΪÁË·þÎñÆ÷ºÍ¿Í»§¶ËͳһÐÒé°æ±¾ÐÅÏ¢¡£È»ºó½¨Á¢Á¬½Ó£¬´´½¨´«ÊäÁ÷£¬ÉèÖÃchunk´óС£¬·¢ËÍÊý¾Ý¡£ÔÚÊÓÆµ²¥·Å¹ý³ÌÖУ¬Èç¹ûÓû§Í϶¯½ø¶ÈÌõ£¬±ã»á´¥·¢seek²Ù×÷£¬¸ÃÏûÏ¢»áͨ¹ýÓëÊÓÆµÊý¾Ý²»Í¬µÄÁ÷·¢Ë͵½Red5£¬Red5»á½âÎö¿ØÖÆÃüÁ·µ»ØÓû§ÐèÒªµÄÊý¾Ý¡£
2.3 HttpÐÒé²¥·ÅÔÀí
¶ÔÓÚHttpÐÒéÇëÇóFLVÊÓÆµÎļþ£¬ÓÉIIS7.0ÏìÓ¦¡£Ä¬ÈÏÇé¿ö£¬Èç¹û¿Í»§¶Ë´ø¿íÁ¼ºÃ£¬ÔòÏÂÔØËÙ¶ÈÔ¶Ô¶´óÓÚ²¥·ÅËÙ¶È¡£ÓÉÓÚÒª±£´æÏÂÔØµÄÊý¾ÝÁ¿±È½Ï´ó£¬ËùÒÔÎļþ»á»º´æµ½Ó²ÅÌ£¬²¥·ÅÆ÷ÖеļÓÔØ½ø¶ÈÌõÏÔʾÏÂÔØµ½Ó²Å̵ÄÊý¾Ý¡£µ±Óû§Í϶¯²¥·ÅÊÓÆµÊ±,Ö»Äܲ¥·ÅÒÑÏÂÔØµÄÊÓÆµÐÅÏ¢£¬Èç¹û½«²¥·Å½ø¶ÈÌõÍ϶¯µ½³¬¹ý¼ÓÔØ½ø¶ÈÌõʱ£¬Ôò²¥·ÅÍ£Ö¹¡£ÎªÁ˽â¾öÕâÒ»ÎÊÌ⣬ÔÚIIS·þÎñÆ÷Ôö¼ÓרÃÅÏìÓ¦FLVÎļþµÄClass£¬¼´FLVHandler¡£
Ê×´ÎÇëÇóÊÓÆµÎļþ£¬FLVHandler»á¶ÁÈ¡·þÎñÆ÷µÄÊÓÆµÎļþͨ¹ýÍøÂçÊä³öÁ÷·¢Ë͵½¿Í»§¶Ë£¬²¥·ÅÆ÷½ÓÊÕµ½ÊÓÆµÊý¾Ýºó»áµ÷Óûص÷·½·¨onMetaData£¬¸Ã·½·¨Ö÷ÒªÊÇ´ÓFLVÎļþÖлñÈ¡MetaData£¬Ò²¾ÍÊÇÊÓÆµµÄ»ù±¾ÐÅÏ¢£¬°üÀ¨ÊÓÆµ³¤¶È£¬Ö¡ÂÊ£¬Êµ¼Ê¿í¶ÈºÍ¸ß¶ÈµÈ£¬ÆäÖл¹°üÀ¨ÊÓÆµµÄ¹Ø¼üÖ¡ÐÅÏ¢¡£FLVµÄMetaData´æ´¢Î»Öýô¸úÔÚFLV HeaderÖ®ºó£¬ÆäTagÀàÐÍÒ²¾ÍÊÇÉÏÎĽéÉÜFLV¸ñʽÖÐÌáµ½µÄ½Å±¾Á÷£¬MetaData¶ÔÓÚÊÓÆµÎļþ²¢²»ÊDZØÐëµÄ£¬µ«ÊÇÔÚ²¥·Å¹ý³ÌÖÐÒªÏÔʾÊÓÆµÊ±¼ä£¬¶ÔÊÓÆµ½øÐÐÍ϶¯ÔòÐèÒªMetaDataÐÅÏ¢¡£
ÊÓÆµÍ϶¯ÇëÇó£¬Èç¹ûÍ϶¯Î»ÖÃÔÚ²¥·ÅÆ÷¼ÓÔØ½ø¶ÈÌõ֮ǰ£¬¼´¸ÃλÖõÄÊÓÆµÊý¾ÝÒѾÏÂÔØµ½Ó²ÅÌ£¬Ôò²¥·ÅÆ÷»á´Ó±¾µØÓ²Å̶ÁÈ¡Êý¾Ý½øÐв¥·Å¡£Èç¹ûÍ϶¯Î»ÖÃÊý¾Ý»¹Ã»ÓÐÏÂÔØµ½Ó²ÅÌ£¬Ê×ÏÈ»á´ÓMetaDataÖÐÕÒ³ö¾àÀëÍ϶¯Î»ÖÃ×î½üµÄ¹Ø¼üÖ¡£¬ÒòΪÊÓÆµ²¥·Åʱ±ØÐë´Ó¹Ø¼üÖ¡¿ªÊ¼²¥·Å£¬