{"id":59,"date":"2010-05-23T16:13:18","date_gmt":"2010-05-23T12:13:18","guid":{"rendered":"http:\/\/blog.denivip.ru\/?p=59"},"modified":"2022-05-13T12:56:11","modified_gmt":"2022-05-13T08:56:11","slug":"develop-flash-dvr-video-player","status":"publish","type":"post","link":"http:\/\/blog.denivip.ru\/index.php\/2010\/05\/develop-flash-dvr-video-player\/","title":{"rendered":"\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f DVR-\u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 flash \u0432\u0438\u0434\u0435\u043e \u043f\u043b\u0435\u0435\u0440\u0435"},"content":{"rendered":"<p style=\"text-align: center;\"><a href=\"http:\/\/blog.denivip.ru\/wp-content\/uploads\/2010\/05\/adobe-media-player.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-73    aligncenter\" title=\"adobe-media-player\" src=\"http:\/\/blog.denivip.ru\/wp-content\/uploads\/2010\/05\/adobe-media-player-300x228.jpg\" alt=\"\" width=\"300\" height=\"228\" srcset=\"http:\/\/blog.denivip.ru\/wp-content\/uploads\/2010\/05\/adobe-media-player-300x228.jpg 300w, http:\/\/blog.denivip.ru\/wp-content\/uploads\/2010\/05\/adobe-media-player.jpg 450w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p style=\"text-align: left;\">\u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432\u0438\u0434\u0435\u043e \u0444\u043b\u044d\u0448 \u043f\u043b\u0435\u0435\u0440\u0430 \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f DVR-\u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u00abTimeShift\u00bb \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u0430 \u043f\u0430\u0443\u0437\u0443 \u00ab\u0436\u0438\u0432\u043e\u0433\u043e\u00bb \u043f\u043e\u0442\u043e\u043a\u0430.<\/p>\n<p>\u0412 \u043e\u0441\u043d\u043e\u0432\u0435, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0437\u0434\u0435\u0441\u044c, \u0432\u0438\u0434\u0435\u043e \u0444\u043b\u044d\u0448 \u043f\u043b\u0435\u0435\u0440\u0430 \u043b\u0435\u0436\u0438\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043e\u0442  \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Adobe \u2013 FLVPlayback 2.5, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043a\u043b\u0430\u0441\u0441\u044b: DynamicStream,  DynamicStreamItem.<br \/>\n<!--more--><br \/>\n\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 vid, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0430 FLVPlayback, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u043d\u0435\u0433\u043e &#8212; \u043e\u0431\u044a\u0435\u043a\u0442 container \u0442\u0438\u043f\u0430 UIComponent. \u041f\u043e\u043c\u0435\u0449\u0430\u0435\u043c \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043e\u0431\u044a\u0435\u043a\u0442 vid \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0442\u043e\u0434\u0430 addChild.<\/p>\n<pre><span style=\"color: #339966;\">\\\\\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 FLVPlayback<\/span><\/pre>\n<pre><span style=\"color: #ff6600;\">var vid = new FLVPlayback();<\/span><\/pre>\n<pre><span style=\"color: #339966;\">\\\\\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 UIComponent<\/span><\/pre>\n<pre><span style=\"color: #ff6600;\">var container:UIComponent = new UIComponent();<\/span><\/pre>\n<pre><span style=\"color: #ff6600;\">container.addChild(vid);<\/span><\/pre>\n<p>\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0430 vid, \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 DVR-\u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438.<\/p>\n<pre><span style=\"color: #ff6600;\">vid.isDVR = true; <span style=\"color: #339966;\">\\\\\u0415\u0441\u043b\u0438 \u043f\u043e\u0442\u043e\u043a DVR, \u0442\u043e true<\/span><\/span><\/pre>\n<pre><span style=\"color: #ff6600;\">vid.isLive = true; <span style=\"color: #339966;\">\\\\\u0415\u0441\u043b\u0438 \u043f\u043e\u0442\u043e\u043a \u00ab\u0436\u0438\u0432\u043e\u0439\u00bb, \u0442\u043e true<\/span><\/span><\/pre>\n<pre><span style=\"color: #ff6600;\">vid.dvrSnapToLive = true; <span style=\"color: #339966;\">\\\\\u0415\u0441\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u043a\u043e\u043d\u0446\u0443, \u0442\u043e true<\/span><\/span><\/pre>\n<pre><span style=\"color: #ff6600;\">vid.dvrFixedDuration = false;<span style=\"color: #339966;\"> \\\\\u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0430\u044f \u0434\u043b\u0438\u043d\u043d\u0430, \u0442\u043e true<\/span><\/span><\/pre>\n<pre><span style=\"color: #ff6600;\">vid.dvrIncrement = 1800;<\/span><\/pre>\n<pre><span style=\"color: #ff6600;\">vid.dvrIncrementVariance = 300;<\/span><\/pre>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 (METADATA_RECEIVED, CUE_POINT, STATE_CHANGE, PROGRESS, PLAYHEAD_UPDATE) \u043e\u0431\u044a\u0435\u043a\u0442\u0443 vid:<\/p>\n<pre><span style=\"color: #ff6600;\">vid.addEventListener(MetadataEvent.METADATA_RECEIVED, onMetaData);<\/span><\/pre>\n<pre><span style=\"color: #ff6600;\">vid.addEventListener(VideoEvent.STATE_CHANGE, onVideoStateChange);<\/span><\/pre>\n<pre><span style=\"color: #ff6600;\">vid.addEventListener(VideoProgressEvent.PROGRESS, progressEventHandler);<\/span><\/pre>\n<pre><span style=\"color: #ff6600;\">vid.addEventListener(VideoEvent.PLAYHEAD_UPDATE, onPlayheadUpdate);<\/span><\/pre>\n<h2><strong>\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u00abTimeShift\u00bb<\/strong><\/h2>\n<p>DVR-\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u00abTimeShift\u00bb \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u00ab\u0436\u0438\u0432\u043e\u0433\u043e\u00bb \u043f\u043e\u0442\u043e\u043a\u0430 \u0441 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u00ab\u043f\u0435\u0440\u0435\u043c\u043e\u0442\u043a\u0438\u00bb.<br \/>\n\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u0430\u0439\u043c\u0435\u0440 \u0434\u043b\u044f \u0438\u0441\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u043e\u0442\u043a\u0443 \u043f\u043e\u0442\u043e\u043a\u0430 \u043d\u0430\u0437\u0430\u0434, \u0438 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u043e\u0442\u043e\u043a\u0430 \u043d\u0430 \u043f\u0430\u0443\u0437\u0443. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 timerNow \u0442\u0438\u043f\u0430 Timer. \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u0436\u0434\u0443\u044e \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e onTimerNowTick.<\/p>\n<pre><span style=\"color: #ff6600;\">var timerNow:Timer = new Timer(1000, 0);<\/span><\/pre>\n<p><span style=\"color: #ff6600;\">timerNow.addEventListener(TimerEvent.TIMER, onTimerNowTick);<\/span> \u0424\u0443\u043d\u043a\u0446\u0438\u044f onTimerNowTick \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u0434\u0441\u0447\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430, \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c timeEnd , timeStart \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u043c\u0435\u0449\u0430\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435 \u043e\u043a\u043d\u043e \u043d\u0430 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u043d\u0430\u0437\u0430\u0434 \u043f\u0443\u0442\u0435\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432 maximum \u0438 minimum \u043e\u0431\u044a\u0435\u043a\u0442\u0430 slider.<\/p>\n<pre><span style=\"color: #ff6600;\">private function onTimerNowTick(evt:TimerEvent):void<\/span><\/pre>\n<pre><span style=\"color: #ff6600;\">{<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">bufferCurrentTime = String(DynamicStream(vid.getVideoPlayer<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">(vid.activeVideoPlayerIndex).netStream).bufferLength);<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">if(!isSliderDragging)<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">{<\/span><\/pre>\n<pre style=\"padding-left: 60px;\"><span style=\"color: #ff6600;\">totalTime++;<\/span><\/pre>\n<pre style=\"padding-left: 60px;\"><span style=\"color: #ff6600;\">slider.maximum = totalTime;<\/span><\/pre>\n<pre style=\"padding-left: 60px;\"><span style=\"color: #ff6600;\">slider.minimum = totalTime - 3600;<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">}<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">var timeNOW:Date = new Date();<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">var h:Number = timeNOW.getHours();<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">var m:Number = timeNOW.getMinutes();<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">var s:Number = timeNOW.getSeconds();<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">timeEnd = (h == 0 ? \"00\" + \":\" : (h &lt; 10 ? \"0\" + h.toString()<\/span><\/pre>\n<pre style=\"padding-left: 90px;\"><span style=\"color: #ff6600;\">+ \":\" : h.toString() + \":\"))<\/span><\/pre>\n<pre style=\"padding-left: 90px;\"><span style=\"color: #ff6600;\">+ (m &lt; 10 ? \"0\" + m.toString() : m.toString()) + \":\"<\/span><\/pre>\n<pre style=\"padding-left: 90px;\"><span style=\"color: #ff6600;\">+ (s &lt; 10 ? \"0\" + s.toString() : s.toString());<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">if(h == 0) h = 23; else h--;<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">timeStart = (h == 0 ? \"00\" + \":\" : (h &lt; 10 ? \"0\" + h.toString()<\/span><\/pre>\n<pre style=\"padding-left: 90px;\"><span style=\"color: #ff6600;\">+ \":\" : h.toString() + \":\"))<\/span><\/pre>\n<pre style=\"padding-left: 90px;\"><span style=\"color: #ff6600;\">+ (m &lt; 10 ? \"0\" + m.toString() : m.toString())<\/span><\/pre>\n<pre style=\"padding-left: 90px;\"><span style=\"color: #ff6600;\">+ \":\" + (s &lt; 10 ? \"0\"<\/span><\/pre>\n<pre style=\"padding-left: 90px;\"><span style=\"color: #ff6600;\">+ s.toString() : s.toString());<\/span><\/pre>\n<pre><span style=\"color: #ff6600;\">}<\/span><\/pre>\n<p>\u041e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u043c totalTime \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0432 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 maximum \u0438 minimum \u043e\u0431\u044a\u0435\u043a\u0442\u0430 slider. \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043a \u043f\u043e\u0442\u043e\u043a\u0443 \u043f\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u0442\u0438\u0432\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438.<\/p>\n<pre><span style=\"color: #ff6600;\">private function onMetaData(evt:MetadataEvent):void<\/span><\/pre>\n<pre><span style=\"color: #ff6600;\">{<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">totalTime = evt.info.duration;<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">slider.maximum = totalTime;<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">slider.minimum = totalTime - 3600;<\/span><\/pre>\n<p><span style=\"color: #ff6600;\">} <\/span><\/p>\n<p><span style=\"color: #ff6600;\"> <\/span>\u041e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430. \u041f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f PLAYING (\u043d\u0430\u0447\u0430\u043b\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f) \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0443 netStream \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0441\u043e\u0431\u044b\u0442\u0438\u044f NET_STATUS.<\/p>\n<pre><span style=\"color: #ff6600;\">private function onVideoStateChange(evt:VideoEvent):void<\/span><\/pre>\n<pre><span style=\"color: #ff6600;\">{<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">switch(vid.state)<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">{<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">case VideoState.PLAYING:<\/span><\/pre>\n<pre style=\"padding-left: 60px;\"><span style=\"color: #339966;\">\\\\\u0415\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u0443\u0441 \u00ab\u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u00bb<\/span><\/pre>\n<pre style=\"padding-left: 60px;\"><span style=\"color: #ff6600;\">bufferingCanvas.visible = false;<\/span><\/pre>\n<pre style=\"padding-left: 60px;\"><span style=\"color: #ff6600;\">DynamicStream(vid.getVideoPlayer<\/span><\/pre>\n<pre style=\"padding-left: 60px;\"><span style=\"color: #ff6600;\">(vid.activeVideoPlayerIndex).netStream)<\/span><\/pre>\n<pre style=\"padding-left: 60px;\"><span style=\"color: #ff6600;\">.addEventListener(NetStatusEvent.NET_STATUS, onNSStatus);<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">break;<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">case VideoState.BUFFERING:<\/span><\/pre>\n<pre style=\"padding-left: 60px;\"><span style=\"color: #339966;\">\\\\\u0415\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u0443\u0441 \u00ab\u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044f\u00bb<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">break;<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">case VideoState.STOPPED:<\/span><\/pre>\n<pre style=\"padding-left: 60px;\"><span style=\"color: #339966;\">\\\\\u0415\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u0443\u0441 \u00ab\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e\u00bb<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">break;<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">case VideoState.PAUSED:<\/span><\/pre>\n<pre style=\"padding-left: 60px;\"><span style=\"color: #339966;\">\\\\\u0415\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u0443\u0441 \u00ab\u043f\u0430\u0443\u0437\u0430\u00bb<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">break;<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">case VideoState.CONNECTION_ERROR:<\/span><\/pre>\n<pre style=\"padding-left: 60px;\"><span style=\"color: #339966;\">\\\\\u0415\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u0443\u0441 \u00ab\u043e\u0448\u0438\u0431\u043a\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f\u00bb<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">break;<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">case VideoState.DISCONNECTED:<\/span><\/pre>\n<pre style=\"padding-left: 60px;\"><span style=\"color: #339966;\">\\\\\u0415\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u0443\u0441 \u00ab\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u043e\u00bb<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">break;<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">case VideoState.LOADING:<\/span><\/pre>\n<pre style=\"padding-left: 60px;\"><span style=\"color: #339966;\">\\\\\u0415\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u0443\u0441 \u00ab\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430\u00bb<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">break;<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">case VideoState.REWINDING:<\/span><\/pre>\n<pre style=\"padding-left: 60px;\"><span style=\"color: #339966;\">\\\\\u0415\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u0443\u0441 \u00ab\u043f\u0435\u0440\u0435\u043c\u043e\u0442\u043a\u0430\u00bb<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">break;<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">}<\/span><\/pre>\n<pre><span style=\"color: #ff6600;\">}<\/span><\/pre>\n<p>\u041e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 playheadTime \u043f\u043e\u0442\u043e\u043a\u0430. \u041a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e currentTime, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0437\u0438\u0446\u0443\u044e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 slider.<\/p>\n<pre><span style=\"color: #ff6600;\">private function onPlayheadUpdate(evt:VideoEvent):void<\/span><\/pre>\n<pre><span style=\"color: #ff6600;\">{<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">if(!isSliderDragging)<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">slider.value = evt.playheadTime;<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">currentTime = evt.playheadTime;<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">if(!timerNow.running)<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">timerNow.start();<\/span><\/pre>\n<p><span style=\"color: #ff6600;\">} <\/span>\u0424\u0443\u043d\u043a\u0446\u0438\u044f toggleDragging \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u043f\u043e\u043b\u0437\u0443\u043d\u043a\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 slider. \u0415\u0441\u043b\u0438 \u043f\u043e\u043b\u0437\u0443\u043d\u043e\u043a \u0437\u0430\u0445\u0432\u0430\u0447\u0435\u043d, \u0442\u043e \u0432 \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 true, \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 false. \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 isSliderDragging. \u0415\u0441\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 true, \u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e doSeek.<\/p>\n<pre><span style=\"color: #ff6600;\">private function toggleDragging(param:Boolean):void<\/span><\/pre>\n<pre><span style=\"color: #ff6600;\">{<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">isSliderDragging = param;<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">if (!param)<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">doSeek();<\/span><\/pre>\n<pre><span style=\"color: #ff6600;\">}<\/span><\/pre>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f doSeek \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442 \u0432\u044b\u0437\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u0430 seek \u043e\u0431\u044a\u0435\u043a\u0442\u0430 vid, \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u044d\u0442\u043e\u043c\u0443 \u043c\u0435\u0442\u043e\u0434\u0443 \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 value \u043e\u0431\u044a\u0435\u043a\u0442\u0430 slider. \u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u00ab\u043f\u0440\u044b\u0436\u043e\u043a\u00bb \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043d\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u0443\u044e \u0441\u0435\u043a\u0443\u043d\u0434\u0443.<\/p>\n<pre><span style=\"color: #ff6600;\">private function doSeek():void<\/span><\/pre>\n<pre><span style=\"color: #ff6600;\">{<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">try{<\/span><\/pre>\n<pre style=\"padding-left: 60px;\"><span style=\"color: #ff6600;\">vid.seek(slider.value);<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">}catch(e:Error){<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">}<\/span><\/pre>\n<pre><span style=\"color: #ff6600;\">}<\/span><\/pre>\n<h2>\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u0430 \u043f\u0430\u0443\u0437\u0443 \u00ab\u0436\u0438\u0432\u043e\u0433\u043e\u00bb \u043f\u043e\u0442\u043e\u043a\u0430<\/h2>\n<p>\u041e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f netStream. \u0415\u0441\u043b\u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043f\u0430\u0443\u0437\u0430, \u0442\u043e \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 true \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 pausedState, \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 false.<\/p>\n<pre><span style=\"color: #ff6600;\">private function onNSStatus(evt:NetStatusEvent):void<\/span><\/pre>\n<pre><span style=\"color: #ff6600;\">{<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">switch (evt.info.code)<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">{<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">case \"NetStream.Pause.Notify\":<\/span><\/pre>\n<pre style=\"padding-left: 60px;\"><span style=\"color: #ff6600;\">pausedState = true;<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">break;<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">case \"NetStream.Unpause.Notify\":<\/span><\/pre>\n<pre style=\"padding-left: 60px;\"><span style=\"color: #ff6600;\">pausedState = false;<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">break;<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">}<\/span><\/pre>\n<pre><span style=\"color: #ff6600;\">}<\/span><\/pre>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f onPlay \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 btnPlay. \u0415\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 VideoPlayer \u043e\u0431\u044a\u0435\u043a\u0442\u0430 vid \u043d\u0435 \u0440\u0430\u0432\u0435\u043d null, \u0442\u043e \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 pausedState \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u043d\u0430 \u043f\u0430\u0443\u0437\u0443, \u043b\u0438\u0431\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432\u0438\u0434\u0435\u043e \u043f\u043e\u0442\u043e\u043a\u0430. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 VideoPlayer \u043e\u0431\u044a\u0435\u043a\u0442\u0430 vid \u0440\u0430\u0432\u0435\u043d null, \u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u043c\u0435\u0442\u043e\u0434 play2, \u043e\u0431\u044a\u0435\u043a\u0442\u0430 vid, \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0435\u043c\u0443 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 dsi. \u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430, \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 FMS \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0438 \u043d\u0430\u0447\u0430\u0442\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0430, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0432 dsi.<\/p>\n<pre> <span style=\"color: #ff6600;\">private function onPlay():void<\/span><\/pre>\n<pre><span style=\"color: #ff6600;\"> {<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\"> if(DynamicStream(vid.getVideoPlayer(vid.activeVideoPlayerIndex)<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\"> .netStream) != null)<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\"> {<\/span><\/pre>\n<pre style=\"padding-left: 60px;\"><span style=\"color: #ff6600;\"> switch (pausedState)<\/span><\/pre>\n<pre style=\"padding-left: 60px;\"><span style=\"color: #ff6600;\"> {<\/span><\/pre>\n<pre style=\"padding-left: 60px;\"><span style=\"color: #ff6600;\"> case true:<\/span><\/pre>\n<pre style=\"padding-left: 90px;\"><span style=\"color: #ff6600;\"> btnPlay.label = \"Play\";<\/span><\/pre>\n<pre style=\"padding-left: 90px;\"><span style=\"color: #ff6600;\"> DynamicStream(vid.getVideoPlayer<\/span><\/pre>\n<pre style=\"padding-left: 90px;\"><span style=\"color: #ff6600;\"> (vid.activeVideoPlayerIndex).netStream).resume();<\/span><\/pre>\n<pre style=\"padding-left: 60px;\"><span style=\"color: #ff6600;\"> break;<\/span><\/pre>\n<pre style=\"padding-left: 60px;\"><span style=\"color: #ff6600;\"> case false:<\/span><\/pre>\n<pre style=\"padding-left: 90px;\"><span style=\"color: #ff6600;\"> btnPlay.label = \"Pause\";<\/span><\/pre>\n<pre style=\"padding-left: 90px;\"><span style=\"color: #ff6600;\"> DynamicStream(vid.getVideoPlayer<\/span><\/pre>\n<pre style=\"padding-left: 90px;\"><span style=\"color: #ff6600;\"> (vid.activeVideoPlayerIndex).netStream).pause();<\/span><\/pre>\n<pre style=\"padding-left: 60px;\"><span style=\"color: #ff6600;\"> break;<\/span><\/pre>\n<pre style=\"padding-left: 60px;\"><span style=\"color: #ff6600;\"> }<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\"> }else{<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\"> vid.play2(dsi);<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\"> }<\/span><\/pre>\n<pre><span style=\"color: #ff6600;\"> }<\/span><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432\u0438\u0434\u0435\u043e \u0444\u043b\u044d\u0448 \u043f\u043b\u0435\u0435\u0440\u0430 \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f DVR-\u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u00abTimeShift\u00bb \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u0430 \u043f\u0430\u0443\u0437\u0443 \u00ab\u0436\u0438\u0432\u043e\u0433\u043e\u00bb \u043f\u043e\u0442\u043e\u043a\u0430. \u0412 \u043e\u0441\u043d\u043e\u0432\u0435, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0437\u0434\u0435\u0441\u044c, \u0432\u0438\u0434\u0435\u043e \u0444\u043b\u044d\u0448 \u043f\u043b\u0435\u0435\u0440\u0430 \u043b\u0435\u0436\u0438\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043e\u0442 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Adobe \u2013 FLVPlayback 2.5, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043a\u043b\u0430\u0441\u0441\u044b: DynamicStream, DynamicStreamItem.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20],"tags":[16,13,22,23],"_links":{"self":[{"href":"http:\/\/blog.denivip.ru\/index.php\/wp-json\/wp\/v2\/posts\/59"}],"collection":[{"href":"http:\/\/blog.denivip.ru\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.denivip.ru\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.denivip.ru\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.denivip.ru\/index.php\/wp-json\/wp\/v2\/comments?post=59"}],"version-history":[{"count":14,"href":"http:\/\/blog.denivip.ru\/index.php\/wp-json\/wp\/v2\/posts\/59\/revisions"}],"predecessor-version":[{"id":91,"href":"http:\/\/blog.denivip.ru\/index.php\/wp-json\/wp\/v2\/posts\/59\/revisions\/91"}],"wp:attachment":[{"href":"http:\/\/blog.denivip.ru\/index.php\/wp-json\/wp\/v2\/media?parent=59"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.denivip.ru\/index.php\/wp-json\/wp\/v2\/categories?post=59"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.denivip.ru\/index.php\/wp-json\/wp\/v2\/tags?post=59"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}