<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>zrong&#039;s Blog &#187; FMS</title>
	<atom:link href="http://zengrong.net/post/tag/fms/feed" rel="self" type="application/rss+xml" />
	<link>http://zengrong.net</link>
	<description>Flash、Flex、RIA、web、Linux和我的生活</description>
	<lastBuildDate>Thu, 09 Feb 2012 15:09:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>对RTMP视频流进行BitmapData.draw()出错的解决办法</title>
		<link>http://zengrong.net/post/1483.htm</link>
		<comments>http://zengrong.net/post/1483.htm#comments</comments>
		<pubDate>Thu, 01 Dec 2011 05:52:23 +0000</pubDate>
		<dc:creator>zrong</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[BitmapData]]></category>
		<category><![CDATA[FMS]]></category>
		<category><![CDATA[RTMP]]></category>

		<guid isPermaLink="false">http://zengrong.net/?p=1483</guid>
		<description><![CDATA[<a href="http://zengrong.net/post/1483.htm" title="对RTMP视频流进行BitmapData.draw()出错的解决办法"></a>source on github 在对Flash Media Server中的视频流使用BitmapData.draw()进行绘制的时候，会抛出这样异常： cannot access rtmp://xxxxx. No policy files granted access. at flash.display::BitmapData/draw() 这个错误出现的原因是，客户端（swf）没有权限复制NetStream中的原始视频数据。看提示，是需要一个策略文件。 但是，在FMS服务器上无法放置策略文件，FMS也不能像Socket服务器那样发送策略文件给客户端，这种情况应该怎么处理呢？ 答案在这里： http://help.adobe.com/en_US/flashmediaserver/ssaslr/WS5b3ccc516d4fbf351e63e3d11a11afc95e-7ec3SSASLR.html#WS5b3ccc516d4fbf351e63e3d11a11afc95e-7fcbSSASLR 只需要FMS在同意client连接后，为其设置videoSampleAccess属性即可。videoSampleAccess的设置方式与readAccess相同。 范例： ?View Code JAVASCRIPTapplication.onConnect = function&#40;$client&#41; &#123; application.acceptConnection&#40;$client&#41;; //设置成&#34;/&#34;，允许所有路径 client.videoSampleAccess = &#34;/&#34;; &#125;]]></description>
			<content:encoded><![CDATA[<a href="http://zengrong.net/post/1483.htm" title="对RTMP视频流进行BitmapData.draw()出错的解决办法"></a><p><a href="https://github.com/zrong/blog/blob/master/bitmapdata_draw_on_rtmp_video.md">source on github</a></p>
<p>在对Flash Media Server中的视频流使用BitmapData.draw()进行绘制的时候，会抛出这样异常：</p>
<blockquote>
<p>cannot access rtmp://xxxxx. No policy files granted access.<br />
  at flash.display::BitmapData/draw()</p>
</blockquote>
<p>这个错误出现的原因是，客户端（swf）没有权限复制NetStream中的原始视频数据。看提示，是需要一个策略文件。</p>
<p>但是，在FMS服务器上无法放置策略文件，FMS也不能像Socket服务器那样发送策略文件给客户端，这种情况应该怎么处理呢？<span id="more-1483"></span></p>
<p><strong>答案在这里：</strong></p>
<p><a href="http://help.adobe.com/en_US/flashmediaserver/ssaslr/WS5b3ccc516d4fbf351e63e3d11a11afc95e-7ec3SSASLR.html#WS5b3ccc516d4fbf351e63e3d11a11afc95e-7fcbSSASLR">http://help.adobe.com/en_US/flashmediaserver/ssaslr/WS5b3ccc516d4fbf351e63e3d11a11afc95e-7ec3SSASLR.html#WS5b3ccc516d4fbf351e63e3d11a11afc95e-7fcbSSASLR</a></p>
<p><strong>只需要FMS在同意client连接后，为其设置videoSampleAccess属性即可。videoSampleAccess的设置方式与readAccess相同。</strong></p>
<p>范例：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1483code2'); return false;">View Code</a> JAVASCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p14832"><td class="code" id="p1483code2"><pre class="javascript" style="font-family:monospace;">application.<span style="color: #660066;">onConnect</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>$client<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span> 
    application.<span style="color: #660066;">acceptConnection</span><span style="color: #009900;">&#40;</span>$client<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #006600; font-style: italic;">//设置成&quot;/&quot;，允许所有路径</span>
    client.<span style="color: #660066;">videoSampleAccess</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;/&quot;</span><span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://zengrong.net/post/1483.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>flashplayer crash on Netstream.play()</title>
		<link>http://zengrong.net/post/1400.htm</link>
		<comments>http://zengrong.net/post/1400.htm#comments</comments>
		<pubDate>Tue, 16 Aug 2011 01:23:21 +0000</pubDate>
		<dc:creator>zrong</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[FlashPlayer]]></category>
		<category><![CDATA[FMS]]></category>
		<category><![CDATA[NetStream]]></category>

		<guid isPermaLink="false">http://zengrong.net/?p=1400</guid>
		<description><![CDATA[<a href="http://zengrong.net/post/1400.htm" title="flashplayer crash on Netstream.play()"></a>Thank smithfox translation,中文版 This is not a 100% frequency bug, I spent 3 days to debug it and I&#8217;m not sure I can duplicate it again. case: Connect to FMS Server using NetStream, once invoke method NetStream.play(&#8216;streamName&#8217;), the flash player &#8230;<p class="read-more"><a href="http://zengrong.net/post/1400.htm">继续阅读 &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://zengrong.net/post/1400.htm" title="flashplayer crash on Netstream.play()"></a><p>Thank <a href="http://smithfox.com/" target="_blank">smithfox</a> translation,<a href="http://zengrong.net/post/1390.htm" title="FlashPlayer在执行NetStream.play的时候崩溃的解决办法">中文版</a></p>
<p>This is not a 100% frequency bug, I spent 3 days to debug it and I&#8217;m not sure I can duplicate it again.</p>
<h2>case:</h2>
<p>Connect to FMS Server using NetStream, once invoke method NetStream.play(&#8216;streamName&#8217;),  the flash player will crash.</p>
<p>all of flash player release have the same issue: single,debug,plugin</p>
<p>The bug will appear if satisfy the conditions below, ((but not all)</p>
<ol>
<li>Win7 OS</li>
<li>Play RTMP stream. RTMP stream can be published  by Flash Media Server(FMS) or Red5. In other words,  playing local flv/f4v/mp4 video have not this problem</li>
<li>the Stream contains audio</li>
<li>Use Frame meta to pre-load. if you do not understand Frame pre-load, see this article: <a href="http://www.bit-101.com/blog/?p=946" target="_blank">Preloaders in AS3</a>;</li>
<li>After complete pre-load, call &#8216;removeChild&#8217; to remove the pre-loaded instance of the class (BUG here).</li>
</ol>
<h2>Development and testing platform (appear BUG)</h2>
<ol>
<li>Flex SDK 4.5.1</li>
<li>Flash Media Server 4.0</li>
<li>Flash Player 10.3</li>
<li>Windows 7</li>
<li>Chrome12/Opera11.5/Firefox5/IE9</li>
</ol>
<p><span id="more-1400"></span></p>
<h2>BUG reproduction:</h2>
<p>I&#8217;ve wrote two simple Demo (one is sender，and another is receiver) to reproduce this bug. (Demo needs FMS support.)</p>
<p>The key is PreloaderNSPlay.as. As the pre-loaded class is no longer needed after the completion of loading, the general way is removing it from Stage. Bug will occur after removal (not occur immediately,</p>
<p>but in a time of receiving the audio stream). If using &#8216;visible&#8217; to hide pre-loaded classes, would not have this problem.</p>
<h2>Usage of the Demo (Here, the server is FMS)</h2>
<ol>
<li>Install FMS, create folder &#8216;/applications/testspeed/&#8217; under the installation directory</li>
<li>Compile NSPulish.as and NSPlay.as, or download the swf file directly.</li>
<li>Make sure that cameras and microphones are installed on your PC. run NSPublish.swf, click &#8220;connect&#8221; button, then view log to confirm the connection is OK,see the following figure.<br />
<img src="/wp-content/uploads/2011/07/nspub.png" alt="play the netstream" /></li>
<li>If client has been connected the FMS server successfully, we will can watch the cameras video, if the flash player still does not crash, let&#8217;s breath toward the microphone, &#8230;huuuuu&#8230;., the whole wold are quiet!!<br />
<img src="http://zengrong.net/wp-content/uploads/2011/07/nsplay.png" alt="crash" /></li>
</ol>
<h2>The full source code of the project is here:</h2>
<p><a href="https://github.com/zrong/blog/tree/master/flashplayer_crash_on_netstream_play/project">https://github.com/zrong/blog/tree/master/flashplayer_crash_on_netstream_play/project</a></p>
<p>NSPublish.as is the video publisher, NSPlay.as is the receiver. You can build the project using Ant, and you can change the SDK in build.properties file.</p>
]]></content:encoded>
			<wfw:commentRss>http://zengrong.net/post/1400.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FlashPlayer在执行NetStream.play的时候崩溃的解决办法</title>
		<link>http://zengrong.net/post/1390.htm</link>
		<comments>http://zengrong.net/post/1390.htm#comments</comments>
		<pubDate>Sat, 30 Jul 2011 07:49:50 +0000</pubDate>
		<dc:creator>zrong</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[FlashPlayer]]></category>
		<category><![CDATA[FMS]]></category>
		<category><![CDATA[NetStream]]></category>

		<guid isPermaLink="false">http://zengrong.net/?p=1390</guid>
		<description><![CDATA[<a href="http://zengrong.net/post/1390.htm" title="FlashPlayer在执行NetStream.play的时候崩溃的解决办法"></a>本文文章源码 本文项目源码 english 2011-09-21:Adobe已经修正了此bug，并在安全更新的致谢名单中列出了本博客：http://www.adobe.com/support/security/bulletins/apsb11-26.html 2011-09-17:Adobe确定该bug已在最新版本中解决，并询问我是否要加入安全公告致谢部分： Thank you again for sending us the Flash Player Netstream issue. This issue should be resolved in the upcoming release of Adobe Flash, currently planned for the next couple of weeks. Please let us know &#8230;<p class="read-more"><a href="http://zengrong.net/post/1390.htm">继续阅读 &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://zengrong.net/post/1390.htm" title="FlashPlayer在执行NetStream.play的时候崩溃的解决办法"></a><ul>
<li><a href="https://github.com/zrong/blog/blob/master/flashplayer_crash_on_netstream_play.md">本文文章源码</a></li>
<li><a href="https://github.com/zrong/blog/tree/master/flashplayer_crash_on_netstream_play/project">本文项目源码</a></li>
<li>
<p><a href="http://zengrong.net/post/1400.htm">english</a></p>
</li>
<li>
<p><span style="color:red">2011-09-21:</span>Adobe已经修正了此bug，并在安全更新的致谢名单中列出了本博客：<a href="http://www.adobe.com/support/security/bulletins/apsb11-26.html">http://www.adobe.com/support/security/bulletins/apsb11-26.html</a></p>
</li>
<li><span style="color:red">2011-09-17:</span>Adobe确定该bug已在最新版本中解决，并询问我是否要加入安全公告致谢部分：</li>
</ul>
<blockquote><p>
  Thank you again for sending us the Flash Player Netstream issue.  This issue should be resolved in the upcoming release of Adobe Flash, currently planned for the next couple of weeks.  Please let us know how you would like to be included in the Acknowledgements section of the upcoming Security Bulletin:
</p></blockquote>
<ul>
<li><span style="color:red">2011-08-15:</span>Adobe再次回复，并声称解决了此BUG：</li>
</ul>
<blockquote><p>
  这个bug已经在内部修复了,该修复会被包含在flash player 11正式发布版当中。谢谢使用flash player!
</p></blockquote>
<ul>
<li><span style="color:red">2011-08-10:</span>Adobe回复了此BUG：</li>
</ul>
<blockquote>
<p>Hello,<br />
  Thanks for your reporting of the issue  flashplayer crash on netstream play. We could reproduce the issue and it has been filed in our internal bug system. We are going to >investigate it ASAP. And any update to the it, we will let you know quickly. Thanks!</p>
</blockquote>
<ul>
<li><span style="color:red">2011-08-09:</span>向Adobe提交了此BUG</li>
</ul>
<hr />
<p>这是个隐藏非常深的BUG，我都怀疑如果再做一次，我能不能把它找出来。它耗费了我宝贵的三天时间，三天啊……</p>
<h2>BUG表现</h2>
<p>在使用NetStream连接FMS发布的流，并执行NetStream.play(&#8216;streamName&#8217;)方法时，FlashPlayer会崩溃。独立版、调试版以及基于浏览器的插件版均如此。</p>
<p>但是，这还不是全部。必须满足以下几点，该BUG才会出现。</p>
<ul>
<li>使用Windows 7操作系统。也就是说，Windows XP不会出现这个问题；</li>
<li>播放的必须是RTMP流，RTMP流可以由<a href="http://www.adobe.com/products/flashmediaserver/">Flash Media Server</a>或者<a href="http://www.red5.org/">Red5</a>来发布。也就是说，使用NetStream播放本地的flv/f4v/mp4视频不会出现这个问题；</li>
<li>播放的流包含音频。也就是说，如果该流只包含视频，不会出现这个问题；</li>
<li>播放的流中包含的音频声音较大。也就是说，即使该流包含音频，但如果发布方没有发出声音，或者发出的声音很小，该问题不会出现；当然，不需要很大的声音就能让播放端立即崩溃；</li>
<li>使用了Frame标签来做预加载。不了解Frame标签预加载的，看这篇文章：<a href="http://www.bit-101.com/blog/?p=946">Preloaders in AS3</a>;</li>
<li>在预加载完毕之后，使用removeChild移除了预加载类的实例（<strong>BUG就在这里</strong>）。</li>
</ul>
<p><span id="more-1390"></span></p>
<h2>开发和测试平台(出现BUG的平台)</h2>
<ul>
<li>Flex SDK 4.5.1</li>
<li>Flash Media Server 4.0</li>
<li>Flash Player 10.3独立版/调试版/插件版</li>
<li>Windows 7 旗舰版</li>
<li>Chrome12/Opera11.5/Firefox5/IE9</li>
</ul>
<h2>BUG再现</h2>
<p>我写了两个简单的Demo（一个发布端，一个接收端）来重现这个BUG。Demo需要FMS的支持。</p>
<p>错误的重点在于预加载类(PreloaderNSPlay.as)。由于预加载类在完成加载后就不再需要，一般的处理方法是将其从Stage中移除。只要将移除，就会出现这个BUG（并非移除后立即出现，而是在接收音频流的时候出现）。而如果使用visible将预加载类隐藏，就不会出现这个问题。</p>
<p>Demo的使用方法（服务端以FMS为例）：</p>
<ol>
<li>安装FMS，在安装目录下建立 <code>/applications/testspeed/</code> 文件夹；</li>
<li>编译NSPulish.as和NSPlay.as，或者<a href="https://github.com/zrong/blog/tree/master/flashplayer_crash_on_netstream_play/project/bin">在这里直接下载swf文件</a>；</li>
<li>确认本机安装了摄像头和麦克风，运行NSPublish.swf，单击“连接”按钮，查看log信息确定连接正常，见下图：<br />
<a href="/wp-content/uploads/2011/07/nspub.png"><img src="/wp-content/uploads/2011/07/nspub.png" alt="播放视频" title="播放视频" width="329" height="412" class="aligncenter size-full wp-image-1391" /></a></li>
<li>运行NSPlay.swf，单击“连接”按钮，查看log信息确认连接正常。此时会看到发布端的摄像头视频。如果FlashPlaye没有崩溃的话，就向着麦克风吹口气……呼……整个世界清静了……<br />
<a href="/wp-content/uploads/2011/07/nsplay.png"><img src="/wp-content/uploads/2011/07/nsplay.png" alt="发布视频" title="发布视频" width="615" height="433" class="aligncenter size-full wp-image-1392" /></a></li>
</ol>
<p>下面只贴出了 <code>PreloaderNSPlay.as</code> 的源码，需要整个项目源码可以在这里下载：<a href="https://github.com/zrong/blog/tree/master/flashplayer_crash_on_netstream_play/project">https://github.com/zrong/blog/tree/master/flashplayer_crash_on_netstream_play/project</a></p>
<p>其中，NSPublish.as是视频发布方，NSPlay.as是视频接收方。可以在build.properties中配置好SDK地址，直接用Ant编译。</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left2">Download <a href="http://zengrong.net/wp-content/plugins/wp-codebox/wp-codebox.php?p=1390&amp;download=PreloaderNSPlay.as">PreloaderNSPlay.as</a></span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13904"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
</pre></td><td class="code" id="p1390code4"><pre class="actionscript" style="font-family:monospace;">package
<span style="color: #66cc66;">&#123;</span>
<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #0066CC;">MovieClip</span>;
<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">DisplayObject</span>;
<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">StageAlign</span>;
<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">StageScaleMode</span>;
<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">Event</span>;
<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">ProgressEvent</span>;
<span style="color: #0066CC;">import</span> flash.<span style="color: #0066CC;">text</span>.<span style="color: #0066CC;">TextField</span>;
<span style="color: #0066CC;">import</span> flash.<span style="color: #0066CC;">text</span>.<span style="color: #0066CC;">TextFormat</span>;
<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">utils</span>.<span style="color: #006600;">getDefinitionByName</span>;
&nbsp;
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> PreloaderNSPlay <span style="color: #0066CC;">extends</span> <span style="color: #0066CC;">MovieClip</span> 
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> PreloaderNSPlay<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#123;</span>
        _mainClassName = <span style="color: #ff0000;">'NSPlay'</span>;
        <span style="color: #0066CC;">stage</span>.<span style="color: #0066CC;">scaleMode</span> = StageScaleMode.<span style="color: #006600;">NO_SCALE</span>;
        <span style="color: #0066CC;">stage</span>.<span style="color: #0066CC;">align</span> = StageAlign.<span style="color: #006600;">TOP_LEFT</span>;
        <span style="color: #0066CC;">stage</span>.<span style="color: #006600;">showDefaultContextMenu</span> = <span style="color: #000000; font-weight: bold;">false</span>;
        _tf = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">TextField</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
        _tf.<span style="color: #006600;">defaultTextFormat</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">TextFormat</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">null</span>,<span style="color: #cc66cc;">12</span>,<span style="color: #cc66cc;">0</span>,<span style="color: #000000; font-weight: bold;">null</span>,<span style="color: #000000; font-weight: bold;">null</span>,<span style="color: #000000; font-weight: bold;">null</span>,<span style="color: #000000; font-weight: bold;">null</span>,<span style="color: #000000; font-weight: bold;">null</span>,<span style="color: #ff0000;">&quot;center&quot;</span><span style="color: #66cc66;">&#41;</span>;
        _tf.<span style="color: #006600;">mouseEnabled</span> = <span style="color: #000000; font-weight: bold;">false</span>;
        _tf.<span style="color: #0066CC;">height</span> = <span style="color: #cc66cc;">20</span>;
        _tf.<span style="color: #006600;">x</span> = <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">stage</span>.<span style="color: #006600;">stageWidth</span>-_tf.<span style="color: #0066CC;">width</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">*</span>.5;
        _tf.<span style="color: #006600;">y</span> = <span style="color: #0066CC;">stage</span>.<span style="color: #006600;">stageHeight</span><span style="color: #66cc66;">*</span>.5;
        <span style="color: #0066CC;">this</span>.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>_tf<span style="color: #66cc66;">&#41;</span>;
&nbsp;
        <span style="color: #0066CC;">this</span>.<span style="color: #006600;">loaderInfo</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>ProgressEvent.<span style="color: #006600;">PROGRESS</span>,progress<span style="color: #66cc66;">&#41;</span>;
        <span style="color: #0066CC;">this</span>.<span style="color: #006600;">loaderInfo</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">COMPLETE</span>,complete<span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
    protected <span style="color: #000000; font-weight: bold;">var</span> _tf:<span style="color: #0066CC;">TextField</span>;
    protected <span style="color: #000000; font-weight: bold;">var</span> _mainClassName:<span style="color: #0066CC;">String</span>;
&nbsp;
    <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> progress<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">e</span>:ProgressEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
    <span style="color: #66cc66;">&#123;</span>
        _tf.<span style="color: #0066CC;">text</span> = <span style="color: #0066CC;">int</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">e</span>.<span style="color: #0066CC;">bytesLoaded</span><span style="color: #66cc66;">/</span><span style="color: #0066CC;">e</span>.<span style="color: #0066CC;">bytesTotal</span><span style="color: #66cc66;">*</span><span style="color: #cc66cc;">100</span><span style="color: #66cc66;">&#41;</span>+<span style="color: #ff0000;">&quot;% 载入中……&quot;</span>;
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
    <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> complete<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">e</span>:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
    <span style="color: #66cc66;">&#123;</span>
        <span style="color: #0066CC;">gotoAndStop</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #000000; font-weight: bold;">var</span> mainClass:<span style="color: #000000; font-weight: bold;">Class</span> = <span style="color: #000000; font-weight: bold;">Class</span><span style="color: #66cc66;">&#40;</span>getDefinitionByName<span style="color: #66cc66;">&#40;</span>_mainClassName<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #0066CC;">stage</span>.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> mainClass<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> as DisplayObject<span style="color: #66cc66;">&#41;</span>;
        destroy<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
    <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> destroy<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
    <span style="color: #66cc66;">&#123;</span>
        <span style="color: #0066CC;">this</span>.<span style="color: #006600;">loaderInfo</span>.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>ProgressEvent.<span style="color: #006600;">PROGRESS</span>,progress<span style="color: #66cc66;">&#41;</span>;
        <span style="color: #0066CC;">this</span>.<span style="color: #006600;">loaderInfo</span>.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">COMPLETE</span>,complete<span style="color: #66cc66;">&#41;</span>;
        <span style="color: #808080; font-style: italic;">//将预加载类从舞台移除(parent.removeChild也一样，因为parent就是舞台），就会导致Flash Player崩溃</span>
        <span style="color: #0066CC;">stage</span>.<span style="color: #006600;">removeChild</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #808080; font-style: italic;">//parent.removeChild(this);</span>
&nbsp;
        <span style="color: #808080; font-style: italic;">//如果只移除显示进度的文本，或者只将自身隐藏而不移除，就不会出现这个Bug</span>
        <span style="color: #808080; font-style: italic;">//this.removeChild(_tf);</span>
        <span style="color: #808080; font-style: italic;">//this.visible = false;</span>
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://zengrong.net/post/1390.htm/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>使用Flex、Flash Media Server和Flash Media Encoding Server创建视频共享程序</title>
		<link>http://zengrong.net/post/745.htm</link>
		<comments>http://zengrong.net/post/745.htm#comments</comments>
		<pubDate>Mon, 17 Aug 2009 08:55:02 +0000</pubDate>
		<dc:creator>zrong</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[FMS]]></category>

		<guid isPermaLink="false">http://www.zengrong.net/?p=745</guid>
		<description><![CDATA[<a href="http://zengrong.net/post/745.htm" title="使用Flex、Flash Media Server和Flash Media Encoding Server创建视频共享程序"></a>Adobe devnet的文章，详细介绍了如何利用Flex从客户端上传视频，用Flash Media Encoding Server在服务器端转换视频，然后利用FMS流发布视频的流程。浅显易懂，值得一看。 Creating a video sharing web application using Flex, Flash Media Server, and Flash Media Encoding Server Flash Media Encoding Server好是好，就是太贵了，6K美刀啊 （看完文章我才发现，早知不看这鸟文）……还是ffmpeg比较靠谱]]></description>
			<content:encoded><![CDATA[<a href="http://zengrong.net/post/745.htm" title="使用Flex、Flash Media Server和Flash Media Encoding Server创建视频共享程序"></a><p>Adobe devnet的文章，详细介绍了如何利用Flex从客户端上传视频，用Flash Media Encoding Server在服务器端转换视频，然后利用FMS流发布视频的流程。浅显易懂，值得一看。</p>
<p><a href="/wp-content/uploads/2009/08/fig01.jpg"><br />
<img src="/wp-content/uploads/2009/08/fig01.jpg" alt="平台架构" title="平台架构" width="582" height="418" class="aligncenter size-full wp-image-747" rel=[lightbox]/></a><br />
<a href="http://www.adobe.com/devnet/flashmediaserver/articles/video_sharing_web_app.html" target="_blank">Creating a video sharing web application using Flex, Flash Media Server, and Flash Media Encoding Server</a><br />
<a href="http://www.adobe.com/cn/products/flashmediaencoding/" target="_blank">Flash Media Encoding Server</a>好是好，就是太贵了，6K美刀啊 <img src='http://zengrong.net/wp-includes/images/smilies/icon_eek.gif' alt=':shock:' class='wp-smiley' />  （看完文章我才发现，早知不看这鸟文）……还是<a href="http://ffmpeg.org/" target="_blank">ffmpeg</a>比较靠谱</p>
]]></content:encoded>
			<wfw:commentRss>http://zengrong.net/post/745.htm/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>FMS中变量的作用域-之二</title>
		<link>http://zengrong.net/post/524.htm</link>
		<comments>http://zengrong.net/post/524.htm#comments</comments>
		<pubDate>Wed, 27 Aug 2008 03:38:23 +0000</pubDate>
		<dc:creator>zrong</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[FMS]]></category>

		<guid isPermaLink="false">http://www.zengrong.net/?p=524</guid>
		<description><![CDATA[<a href="http://zengrong.net/post/524.htm" title="FMS中变量的作用域-之二"></a>在FMS中变量的作用域一文中，我曾经研究过这个问题，得到的结论是： 保存在Client中的变量对于每个客户机都是不同的，application中的变量则可以在instance中共享，instance之间不能共享变量。（使用一些变通的方法是可以的） 这里要讨论的，是FMS中到底有哪几种变量作用域（注：这里不讨论函数内部的变量），对于FMS代码中的自定义类，变量的作用域又是什么呢？在FMS的自定义类中，如何调用其他作用域的变量？ 首先看一段代码：User.asc ?View Code ACTIONSCRIPTfunction User&#40;&#41; &#123; varInGlobal = 0; this.varInUser = 0; User.varStatic = 0; application.varInApp = 0; &#125; &#160; User.prototype.userTrace = function&#40;&#41; &#123; trace&#40;'=====================User.prototype.userTrace'&#41;; trace&#40;'varInGlobal:' + varInGlobal&#41;; trace&#40;'this.varInUser:' + this.varInUser&#41;; trace&#40;'user.varInUser:' + user.varInUser&#41;; trace&#40;'User.varStatic:' + User.varStatic&#41;; &#8230;<p class="read-more"><a href="http://zengrong.net/post/524.htm">继续阅读 &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://zengrong.net/post/524.htm" title="FMS中变量的作用域-之二"></a><p>在<a href="/?p=221" target="_blank">FMS中变量的作用域</a>一文中，我曾经研究过这个问题，得到的结论是：</p>
<blockquote><p>
保存在Client中的变量对于每个客户机都是不同的，application中的变量则可以在instance中共享，instance之间不能共享变量。（使用一些变通的方法是可以的）</p></blockquote>
<p>这里要讨论的，是FMS中到底有哪几种变量作用域（注：这里不讨论函数内部的变量），对于FMS代码中的自定义类，变量的作用域又是什么呢？在FMS的自定义类中，如何调用其他作用域的变量？<br />
<span id="more-524"></span><br />
首先看一段代码：User.asc</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p524code8'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p5248"><td class="code" id="p524code8"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> User<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
	varInGlobal = <span style="color: #cc66cc;">0</span>;
	<span style="color: #0066CC;">this</span>.<span style="color: #006600;">varInUser</span> = <span style="color: #cc66cc;">0</span>;
	User.<span style="color: #006600;">varStatic</span> = <span style="color: #cc66cc;">0</span>;
	application.<span style="color: #006600;">varInApp</span> = <span style="color: #cc66cc;">0</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
User.<span style="color: #0066CC;">prototype</span>.<span style="color: #006600;">userTrace</span> = <span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'=====================User.prototype.userTrace'</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'varInGlobal:'</span> + varInGlobal<span style="color: #66cc66;">&#41;</span>;
	<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'this.varInUser:'</span> + <span style="color: #0066CC;">this</span>.<span style="color: #006600;">varInUser</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'user.varInUser:'</span> + user.<span style="color: #006600;">varInUser</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'User.varStatic:'</span> + User.<span style="color: #006600;">varStatic</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'application.varInApp:'</span> + application.<span style="color: #006600;">varInApp</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
User.<span style="color: #006600;">userTraceStatic</span> = <span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'=====================User.userTraceStatic'</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'varInGlobal:'</span> + varInGlobal<span style="color: #66cc66;">&#41;</span>;
	<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'this.varInUser:'</span> + <span style="color: #0066CC;">this</span>.<span style="color: #006600;">varInUser</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'user.varInUser:'</span> + user.<span style="color: #006600;">varInUser</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'User.varStatic:'</span> + User.<span style="color: #006600;">varStatic</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'application.varInApp:'</span> + application.<span style="color: #006600;">varInApp</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>这段代码写在User.asc文件中，与main.asc处于同一个FMS程序var_test下。User是一个自定义对象，在建立User对象的时候，建立了4个变量，第1个没有用任何的修饰符，第2个用this修饰符，第3个用User修饰符，第4个application修饰符。<br />
另外，建立了两个方法，一个是User类的静态方法userTraceStatic，另一个是实例方法userTrace，两个方法中的代码相同，都是显示这4个变量的值。其中对varInUser变量采用不同的引用方式显示了两遍。</p>
<p>main.asc的内容如下：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p524code9'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p5249"><td class="code" id="p524code9"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">load</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;User.asc&quot;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
application.<span style="color: #006600;">onAppStart</span> = <span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
	application.<span style="color: #0066CC;">registerClass</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;User&quot;</span>, User<span style="color: #66cc66;">&#41;</span>;
	user = <span style="color: #000000; font-weight: bold;">new</span> User<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
application.<span style="color: #0066CC;">onConnect</span> = <span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>client<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;登录成功！&quot;</span><span style="color: #66cc66;">&#41;</span>;
	application.<span style="color: #006600;">acceptConnection</span><span style="color: #66cc66;">&#40;</span>client<span style="color: #66cc66;">&#41;</span>;
	varInGlobal ++;
	user.<span style="color: #006600;">varInUser</span> += <span style="color: #cc66cc;">10</span>;
	User.<span style="color: #006600;">varStatic</span> += <span style="color: #cc66cc;">100</span>;
	application.<span style="color: #006600;">varInApp</span> += <span style="color: #cc66cc;">1000</span>;
&nbsp;
	globalTrace<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
	user.<span style="color: #006600;">userTrace</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
	User.<span style="color: #006600;">userTraceStatic</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> globalTrace<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'=====================globalTrace'</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'varInGlobal:'</span> + varInGlobal<span style="color: #66cc66;">&#41;</span>;
	<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'user.varInUser:'</span> + user.<span style="color: #006600;">varInUser</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'User.varStatic:'</span> + User.<span style="color: #006600;">varStatic</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'application.varInApp:'</span> + application.<span style="color: #006600;">varInApp</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>这段代码中定义了一个全局函数globalTrace，仍然是显示这4个变量的值。在onConnect事件中，改变这4个变量的值，并调用3个显示值的函数。</p>
<p>Flex 客户端代码：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p524code10'); return false;">View Code</a> XML</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p52410"><td class="code" id="p524code10"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;utf-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;mx:Application</span> <span style="color: #000066;">xmlns:mx</span>=<span style="color: #ff0000;">&quot;http://www.adobe.com/2006/mxml&quot;</span> <span style="color: #000066;">layout</span>=<span style="color: #ff0000;">&quot;vertical&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;mx:Script<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #339933;">&lt;![CDATA[</span>
<span style="color: #339933;">			import flash.net.NetConnection;</span>
&nbsp;
<span style="color: #339933;">			private var nc:NetConnection;</span>
&nbsp;
<span style="color: #339933;">			private function ncClick():void</span>
<span style="color: #339933;">			{</span>
<span style="color: #339933;">				nc = new NetConnection();</span>
<span style="color: #339933;">				nc.addEventListener(NetStatusEvent.NET_STATUS, ncHandler);</span>
<span style="color: #339933;">				nc.connect('rtmp:/var_test/1');</span>
<span style="color: #339933;">			}</span>
&nbsp;
<span style="color: #339933;">			private function ncHandler(evt:NetStatusEvent):void</span>
<span style="color: #339933;">			{</span>
<span style="color: #339933;">				trace(evt.info.code)</span>
<span style="color: #339933;">			}</span>
<span style="color: #339933;">		]]&gt;</span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/mx:Script<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;mx:Button</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;ncBTN&quot;</span> <span style="color: #000066;">label</span>=<span style="color: #ff0000;">&quot;nc&quot;</span> <span style="color: #000066;">click</span>=<span style="color: #ff0000;">&quot;ncClick()&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/mx:Application<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p>执行结果如下（FMS Admin Console中的显示）：</p>
<blockquote><p>登录成功！<br />
=====================globalTrace<br />
user.varInUser:10<br />
varInGlobal:1<br />
User.varStatic:100<br />
application.varInApp:1000<br />
=====================User.prototype.userTrace<br />
varInGlobal:1<br />
this.varInUser:10<br />
user.varInUser:10<br />
User.varStatic:100<br />
application.varInApp:1000<br />
=====================User.userTraceStatic<br />
varInGlobal:1<br />
this.varInUser:undefined<br />
user.varInUser:10<br />
User.varStatic:100<br />
application.varInApp:1000
</p></blockquote>
<p>由此可见，没有使用任何标示符定义的变量varInGlobal，确实是一个全局变量，不但在自定义类中，还是在其他事件中，都是可以直接访问的。application中的变量其实和user实例中的变量是一样的，必须指定属主才能访问。而User中定义的变量和方法都是静态的，静态的方法无法使用this关键字访问实例中的变量，但可以通过全局变量user访问。</p>
Note: There is a file embedded within this post, please visit this post to download the file.
]]></content:encoded>
			<wfw:commentRss>http://zengrong.net/post/524.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NOD32造成FMS出现&#8220;&#8230;參數錯誤。 87&#8221;错误</title>
		<link>http://zengrong.net/post/389.htm</link>
		<comments>http://zengrong.net/post/389.htm#comments</comments>
		<pubDate>Mon, 19 Nov 2007 15:10:02 +0000</pubDate>
		<dc:creator>zrong</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[FMS]]></category>

		<guid isPermaLink="false">http://www.zengrong.net/?p=389</guid>
		<description><![CDATA[<a href="http://zengrong.net/post/389.htm" title="NOD32造成FMS出现&ldquo;...參數錯誤。 87&rdquo;错误"></a>配置好的一台FMS，转移到了另一台主机上，只是目录发生了变化。我更新了配置文件中的路径，但仍然不能使用。在core Log中找到这样的错误提示： Asynchronous I/O operation failed (Failed to attach to completion port: 參數錯誤。 87) 查了配置都没有什么错，于是就在google上搜了一下，找到这条信息。和文中提到的一样，碰巧新的主机上也安装了NOD32杀毒软件。于是卸载之，重启服务器，测试成功。]]></description>
			<content:encoded><![CDATA[<a href="http://zengrong.net/post/389.htm" title="NOD32造成FMS出现&ldquo;...參數錯誤。 87&rdquo;错误"></a><p>配置好的一台FMS，转移到了另一台主机上，只是目录发生了变化。我更新了配置文件中的路径，但仍然不能使用。在core Log中找到这样的错误提示：</p>
<blockquote><p>Asynchronous I/O operation failed (Failed to attach to completion port: 參數錯誤。 87)</p></blockquote>
<p>查了配置都没有什么错，于是就在google上搜了一下，找到<a href="http://www.ittang.com/2007/1101/1029.html" target="_blank">这条信息</a>。和文中提到的一样，碰巧新的主机上也安装了NOD32杀毒软件。于是卸载之，重启服务器，测试成功。</p>
]]></content:encoded>
			<wfw:commentRss>http://zengrong.net/post/389.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在Eclipse或Flex Builder中开发FMS程序</title>
		<link>http://zengrong.net/post/350.htm</link>
		<comments>http://zengrong.net/post/350.htm#comments</comments>
		<pubDate>Tue, 07 Aug 2007 07:49:39 +0000</pubDate>
		<dc:creator>zrong</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[FlexBuilder]]></category>
		<category><![CDATA[FMS]]></category>

		<guid isPermaLink="false">http://www.zengrong.net/?p=350</guid>
		<description><![CDATA[<a href="http://zengrong.net/post/350.htm" title="在Eclipse或Flex Builder中开发FMS程序"></a>在编写FMS程序的时候，相信很多朋友后和我一样郁闷。没有一款好的编辑器来支持，不便于查错，没有语法自动完成，对于多个文件管理不方便&#8230; 我一直是使用SE&#124;PY ActionScript Editor写FMS程序的，虽然它比用Flash IDE来写ASC文件要方便许多，但是还是有很多细节没有考虑到。不过，现在我不必再郁闷下去了。 fczone.com为我们带来了这样一个优秀的插件，让我们能够在Eclipse或者Flex Builder中开发FMS程序。 首先看看它的功能特点把（图片来自于fczone.com）： 大纲视图 代码自动完成 输出控制台（可监视trace的内容） 自动插入 导入和转换ActionScript2类文件 转换前 转换后 语法和错误检查 下载插件： for Flex Builder 3 for Eclipse 3.2 for Eclipse 3.3 详细安装介绍 视频介绍]]></description>
			<content:encoded><![CDATA[<a href="http://zengrong.net/post/350.htm" title="在Eclipse或Flex Builder中开发FMS程序"></a><p>在编写FMS程序的时候，相信很多朋友后和我一样郁闷。没有一款好的编辑器来支持，不便于查错，没有语法自动完成，对于多个文件管理不方便&#8230;</p>
<p>我一直是使用<a href="http://www.sepy.it/" target="_blank">SE|PY ActionScript Editor</a>写FMS程序的，虽然它比用Flash IDE来写ASC文件要方便许多，但是还是有很多细节没有考虑到。不过，现在我不必再郁闷下去了。</p>
<p><a href="tp://fczone.com/" target="_blank">fczone.com</a>为我们带来了这样一个优秀的插件，让我们能够在<a href="http://www.eclipse.org/" target="_blank">Eclipse</a>或者<a href="http://labs.adobe.com/technologies/flex/flexbuilder3/" target="_blank">Flex Builder</a>中开发FMS程序。</p>
<p>首先看看它的功能特点把（图片来自于fczone.com）：</p>
<h4>大纲视图</h4>
<p><a href="http://fczone.com/eclipse/features/outline_full.png" target="_blank"><img src="http://fczone.com/eclipse/features/f1.png" alt="点击查看大图" /></a></p>
<h4>代码自动完成</h4>
<p><a href="http://fczone.com/eclipse/features/code_complete_full.png" target="_blank"><img src="http://fczone.com/eclipse/features/f2.png" alt="点击查看大图" /></a></p>
<h4>输出控制台（可监视trace的内容）</h4>
<p><a href="hhttp://fczone.com/eclipse/features/console_full.png" target="_blank"><img src="http://fczone.com/eclipse/features/f3.png" alt="点击查看大图" /></a></p>
<p><span id="more-350"></span></p>
<h4>自动插入</h4>
<p><img src="http://fczone.com/eclipse/features/f4.png" /></p>
<h4>导入和转换ActionScript2类文件</h4>
<p><a href="http://fczone.com/eclipse/features/as2_before.txt" target="_blank">转换前</a> <a href="http://fczone.com/eclipse/features/as2_after.txt" target="_blank">转换后</a><br />
<a href="http://fczone.com/eclipse/features/AS2_full.png" target="_blank"><img src="http://fczone.com/eclipse/features/f5.png" alt="点击查看大图" /></a></p>
<h4>语法和错误检查</h4>
<p><a href="http://fczone.com/eclipse/features/errors_full.png" target="_blank"><img src="http://fczone.com/eclipse/features/f6.png" alt="点击查看大图" /></a></p>
<p>下载插件：<br />
<a href="http://fczone.com/getFile?id=FMSProject_1.0.0.zip" target="_blank">for Flex Builder 3</a><br />
<a href="http://fczone.com/getFile?id=FMSProject_1.0.0.zip" target="_blank">for Eclipse 3.2</a><br />
<a href="http://fczone.com/getFile?id=FMSProject_1.0.0_eclipe3.3.zip" target="_blank">for Eclipse 3.3</a></p>
<p><a href="http://fczone.com/eclipse/downloads" target="_blank">详细安装介绍</a> <a href="http://fczone.com/eclipse/demo/" target="_blank">视频介绍</a></p>
]]></content:encoded>
			<wfw:commentRss>http://zengrong.net/post/350.htm/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>NetStream information objects</title>
		<link>http://zengrong.net/post/338.htm</link>
		<comments>http://zengrong.net/post/338.htm#comments</comments>
		<pubDate>Fri, 01 Jun 2007 14:47:23 +0000</pubDate>
		<dc:creator>zrong</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[FMS]]></category>
		<category><![CDATA[NetStream]]></category>

		<guid isPermaLink="false">http://www.zengrong.net/?p=338</guid>
		<description><![CDATA[<a href="http://zengrong.net/post/338.htm" title="NetStream information objects"></a>在NetStream信息对象提供的大量信息中，我常用到的有这么几个： 信息 类型 范围 说明 NetStream.Play.PublishNotify 发布流 所有订阅者 当发布者的流开始发布的时候，所有的订阅者都会收到这个消息。但发布者不会收到这个消息。 NetStream.Play.UnpublishNotify 发布流 所有订阅者 当发布者的流停止发布的时候，所有的订阅者都会收到这个消息。但发布者不会收到这个消息。 NetStream.Publish.BadName 发布流 发布者 当发布者试图发布一个已经存在的流时会收到这个消息。只有发布者可以收到这个消息。 NetStream.Publish.Start 发布流 发布者 当发布者开始发布流的时候收到这个消息。只有发布者可以收到这个消息。 NetStream.Unpublish.Success 发布流 发布者 当发布者结束发布流的时候收到这个消息。只有发布者可以收到这个消息。 NetStream.Play.Reset 播放流 播放者 当播放者开始播放流之前会收到这个消息。只有播放者可以收到这个消息 。 NetStream.Play.Start 播放流 播放者 当播放者开始播放流的时候会收到这个消息。只有播放者可以收到这个消息 。 NetStream.Play.Stop 播放流 播放者 当播放者停止播放流的时候会收到这个消息。只有播放者可以收到这个消息 。 &#8230;<p class="read-more"><a href="http://zengrong.net/post/338.htm">继续阅读 &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://zengrong.net/post/338.htm" title="NetStream information objects"></a><p>在NetStream信息对象提供的大量信息中，我常用到的有这么几个：</p>
<table border="1" bordercolor="#000000" cellpadding="3" cellspacing="0" width="100%">
<tr bgcolor="#cccccc">
<td align="center" width="25%"><strong>信息</strong></td>
<td align="center" width="100"><strong>类型</strong></td>
<td align="center" width="25%"><strong>范围</strong></td>
<td align="center" width="25%"><strong>说明</strong></td>
</tr>
<tr>
<td width="25%">NetStream.Play.PublishNotify</td>
<td align="center" width="100">发布流</td>
<td align="center" width="25%">所有订阅者</td>
<td width="25%">当发布者的流开始发布的时候，所有的订阅者都会收到这个消息。但发布者不会收到这个消息。</td>
</tr>
<tr>
<td width="25%">NetStream.Play.UnpublishNotify</td>
<td align="center" width="100">发布流</td>
<td align="center" width="25%">所有订阅者</td>
<td width="25%">当发布者的流停止发布的时候，所有的订阅者都会收到这个消息。但发布者不会收到这个消息。</td>
</tr>
<tr>
<td width="25%">NetStream.Publish.BadName</td>
<td align="center" width="100">发布流</td>
<td align="center" width="25%">发布者</td>
<td width="25%">当发布者试图发布一个已经存在的流时会收到这个消息。只有发布者可以收到这个消息。</td>
</tr>
<tr>
<td width="25%">NetStream.Publish.Start</td>
<td align="center" width="100">发布流</td>
<td align="center" width="25%">发布者</td>
<td width="25%">当发布者开始发布流的时候收到这个消息。只有发布者可以收到这个消息。</td>
</tr>
<tr>
<td width="25%">NetStream.Unpublish.Success</td>
<td align="center" width="100">发布流</td>
<td align="center" width="25%">发布者</td>
<td width="25%">当发布者结束发布流的时候收到这个消息。只有发布者可以收到这个消息。</td>
</tr>
<tr>
<td width="25%">NetStream.Play.Reset</td>
<td align="center" width="100">播放流</td>
<td align="center" width="25%">播放者</td>
<td width="25%">当播放者开始播放流之前会收到这个消息。只有播放者可以收到这个消息 。</td>
</tr>
<tr>
<td width="25%">NetStream.Play.Start</td>
<td align="center" width="100">播放流</td>
<td align="center" width="25%">播放者</td>
<td width="25%">当播放者开始播放流的时候会收到这个消息。只有播放者可以收到这个消息 。</td>
</tr>
<tr>
<td width="25%">NetStream.Play.Stop</td>
<td align="center" width="100">播放流</td>
<td align="center" width="25%">播放者</td>
<td width="25%">当播放者停止播放流的时候会收到这个消息。只有播放者可以收到这个消息 。</td>
</tr>
</table>
<p>假设我们有2个流，一个叫做PU，用于发布，一个叫做PL，用于播放PU发布的流。那么当PU开始发布的时候（如果发布成功），消息的发布情况是这样的：<br />
PU会收到 NetStream.Publish.Start消息，PL会收到 NetStream.Play.PublishNotify消息。</p>
<p>当PU停止发布的时候，情况是这样的：<br />
PU会收到 NetStream.Unpublish.Success，PL会收到 NetStream.Play.UnpublishNotify。</p>
<p>当PL开始播放的时候，情况是这样的：<br />
PL会收到 NetStream.Play.Reset、 NetStream.Play.Start，PU不会收到任何消息。</p>
<p>当PL停止播放的时候，情况是这样的：<br />
PL会收到 NetStream.Play.Stop消息，PU不会收到任何消息。</p>
<p>由此可见，发布者的发布和停止发布操作，所有的订阅者都可以收到，而订阅者对流的播放操作则并不会通知流的发布者。因此，对于流的控制上，还是要盯紧发布者。 <img src='http://zengrong.net/wp-includes/images/smilies/icon_eek.gif' alt=':shock:' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://zengrong.net/post/338.htm/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>在Flex2中使用NetConnection的一些注意事项</title>
		<link>http://zengrong.net/post/333.htm</link>
		<comments>http://zengrong.net/post/333.htm#comments</comments>
		<pubDate>Mon, 26 Mar 2007 12:37:53 +0000</pubDate>
		<dc:creator>zrong</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[FMS]]></category>
		<category><![CDATA[NetConnection]]></category>

		<guid isPermaLink="false">http://www.zengrong.net/?p=333</guid>
		<description><![CDATA[<a href="http://zengrong.net/post/333.htm" title="在Flex2中使用NetConnection的一些注意事项"></a>在使用ActionScript3的NetConnection类连接Flash Media Server或者Remoting的时候，需要注意以下几点： 1.注意设定AMF版本 ActionScript3默认使用的是AMF3，而ActionScript2和ActionScript1使用的是AMF0，如果不指定NetConnection的AMF版本，就会出现连接失败。指定的方法如下： ?View Code ACTIONSCRIPTNetConnection.defaultObjectEncoding = flash.net.ObjectEncoding.AMF0; 上面的代码会修改所有的NetConnection实例的默认AMF版本。 如果只需要修改一个NetConnection实例的AMF版本，代码如下： ?View Code ACTIONSCRIPTpublic var NC:flash.net.NetConnection; NC = new NetConnection&#40;&#41;; NC.objectEncoding = flash.net.ObjectEncoding.AMF0; 2.获取onStatus状态值 在ActionScript2中的方法已经不能使用，要获取NetConnection实例的连接状态，必须使用NetStatusEvent事件类，代码如下： ?View Code ACTIONSCRIPTimport flash.events.NetStatusEvent; import flash.net.NetConnection; &#160; private function statusHandler&#40;evt:NetStatusEvent&#41;:void&#123; trace&#40;evt.info.code&#41;; switch&#40;evt.info.code&#41;&#123; case &#34;NetConnection.Connect.Rejected&#34;: &#8230;<p class="read-more"><a href="http://zengrong.net/post/333.htm">继续阅读 &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://zengrong.net/post/333.htm" title="在Flex2中使用NetConnection的一些注意事项"></a><p>在使用ActionScript3的NetConnection类连接Flash Media Server或者Remoting的时候，需要注意以下几点：</p>
<p><strong>1.注意设定AMF版本</strong><br />
ActionScript3默认使用的是AMF3，而ActionScript2和ActionScript1使用的是AMF0，如果不指定NetConnection的AMF版本，就会出现连接失败。指定的方法如下：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p333code15'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p33315"><td class="code" id="p333code15"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">NetConnection</span>.<span style="color: #006600;">defaultObjectEncoding</span> = flash.<span style="color: #006600;">net</span>.<span style="color: #006600;">ObjectEncoding</span>.<span style="color: #006600;">AMF0</span>;</pre></td></tr></table></div>

<p>上面的代码会修改所有的NetConnection实例的默认AMF版本。<br />
如果只需要修改一个NetConnection实例的AMF版本，代码如下：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p333code16'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p33316"><td class="code" id="p333code16"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> NC:flash.<span style="color: #006600;">net</span>.<span style="color: #0066CC;">NetConnection</span>;
NC = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">NetConnection</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
NC.<span style="color: #006600;">objectEncoding</span> = flash.<span style="color: #006600;">net</span>.<span style="color: #006600;">ObjectEncoding</span>.<span style="color: #006600;">AMF0</span>;</pre></td></tr></table></div>

<p><strong>2.获取onStatus状态值</strong><br />
在ActionScript2中的方法已经不能使用，要获取NetConnection实例的连接状态，必须使用NetStatusEvent事件类，代码如下：<span id="more-333"></span></p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p333code17'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p33317"><td class="code" id="p333code17"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">NetStatusEvent</span>;
<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">net</span>.<span style="color: #0066CC;">NetConnection</span>;
&nbsp;
<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> statusHandler<span style="color: #66cc66;">&#40;</span>evt:NetStatusEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>evt.<span style="color: #006600;">info</span>.<span style="color: #006600;">code</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #b1b100;">switch</span><span style="color: #66cc66;">&#40;</span>evt.<span style="color: #006600;">info</span>.<span style="color: #006600;">code</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
		<span style="color: #b1b100;">case</span> <span style="color: #ff0000;">&quot;NetConnection.Connect.Rejected&quot;</span>:
			<span style="color: #000000; font-weight: bold;">var</span> appmsg:<span style="color: #0066CC;">String</span> = <span style="color: #66cc66;">&#40;</span>evt.<span style="color: #006600;">info</span>.<span style="color: #006600;">application</span> == <span style="color: #0066CC;">undefined</span><span style="color: #66cc66;">&#41;</span> ? <span style="color: #ff0000;">&quot;&quot;</span> : evt.<span style="color: #006600;">info</span>.<span style="color: #006600;">application</span>;
			mx.<span style="color: #006600;">controls</span>.<span style="color: #006600;">Alert</span><span style="color: #66cc66;">&#40;</span>appmsg<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #b1b100;">break</span>;
		<span style="color: #b1b100;">case</span> <span style="color: #ff0000;">&quot;NetConnection.Connect.Failed&quot;</span>:
			mx.<span style="color: #006600;">controls</span>.<span style="color: #006600;">Alert</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;连接失败&quot;</span><span style="color: #66cc66;">&#41;</span>;
			<span style="color: #b1b100;">break</span>;
		<span style="color: #b1b100;">case</span> <span style="color: #ff0000;">&quot;NetConnection.Connect.Closed&quot;</span>:
			<span style="color: #808080; font-style: italic;">//</span>
			<span style="color: #b1b100;">break</span>;
		<span style="color: #b1b100;">case</span> <span style="color: #ff0000;">&quot;NetConnection.Connect.Success&quot;</span>:
			<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;连接成功！&quot;</span><span style="color: #66cc66;">&#41;</span>;
			<span style="color: #b1b100;">break</span>;
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> login<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><span style="color: #66cc66;">&#123;</span>
	adminNC = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">NetConnection</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
	adminNC.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>NetStatusEvent.<span style="color: #006600;">NET_STATUS</span>, statusHandler<span style="color: #66cc66;">&#41;</span>;
	adminNC.<span style="color: #0066CC;">connect</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;http://localhost/test/test1&quot;</span>, userName, userPWD<span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p><strong>3.在NetConnection实例中定义被呼叫方法</strong><br />
在ActionScript2中，我们可以使用myNC.functionName=function(){}来定义NetConnection对象中被呼叫的方法。但是，在ActionScript3中，NetConnection并非动态类，不能用这样的方法添加被呼叫方法，而必须使用client属性实现(接上例)：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p333code18'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p33318"><td class="code" id="p333code18"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">NetStatusEvent</span>;
<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">net</span>.<span style="color: #0066CC;">NetConnection</span>;
&nbsp;
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> loginSuccess<span style="color: #66cc66;">&#40;</span>$adminLevel:<span style="color: #0066CC;">int</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;loginSuccess被调用,$adminLevel:&quot;</span> + $adminLevel<span style="color: #66cc66;">&#41;</span>;
	<span style="color: #0066CC;">this</span>.<span style="color: #006600;">dispatchEvent</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Event<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;loginSuccess&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> login<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><span style="color: #66cc66;">&#123;</span>
	adminNC = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">NetConnection</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
	adminNC.<span style="color: #006600;">client</span> = <span style="color: #0066CC;">this</span>;
	adminNC.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>NetStatusEvent.<span style="color: #006600;">NET_STATUS</span>, statusHandler<span style="color: #66cc66;">&#41;</span>;
	adminNC.<span style="color: #0066CC;">connect</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;http://localhost/test/test1&quot;</span>, userName, userPWD<span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>当登录成功后，FMS端会调用客户端NC的loginSuccess方法，并传回管理员的级别。在这里，为client属性赋值，告知被调用的loginSuccess方法在哪个对象中。被调用的方法必须被声明为public。</p>
<p>还有一些和SharedObject和NetStream类相关的注意事项，可以看<a href="http://flash-communications.net/technotes/fms2/flex2FMS/index.html" target="_blank">这里</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://zengrong.net/post/333.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>trace2 in FMS</title>
		<link>http://zengrong.net/post/238.htm</link>
		<comments>http://zengrong.net/post/238.htm#comments</comments>
		<pubDate>Thu, 10 Aug 2006 01:12:25 +0000</pubDate>
		<dc:creator>zrong</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[FMS]]></category>
		<category><![CDATA[trace]]></category>

		<guid isPermaLink="false">http://www.zengrong.net/?p=238</guid>
		<description><![CDATA[<a href="http://zengrong.net/post/238.htm" title="trace2 in FMS"></a>基于fczone改写的framework.asc（详见让FMS中的trace支持Object），我稍作修改，加入了对Array和Object的判断，做成了这个trace2()函数，使用前只需先load(&#8220;trace2.acs&#8221;)即可，不需要载入framework.asc了： 8月13日更新：解决了不处理Object的问题 ?Download trace2.asc1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 &#8230;<p class="read-more"><a href="http://zengrong.net/post/238.htm">继续阅读 &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://zengrong.net/post/238.htm" title="trace2 in FMS"></a><p>基于<a href="http://fczone.com/?p=22" target="_blank">fczone</a>改写的framework.asc（详见让<a href="/?p=237" target="_blank">FMS中的trace支持Object</a>），我稍作修改，加入了对Array和Object的判断，做成了这个<a href="/?p=238">trace2()</a>函数，使用前只需先load(&#8220;trace2.acs&#8221;)即可，不需要载入framework.asc了：</p>
<p><span>8月13日更新：</span>解决了不处理Object的问题</p>
<p><span id="more-238"></span></p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left2">Download <a href="http://zengrong.net/wp-content/plugins/wp-codebox/wp-codebox.php?p=238&amp;download=trace2.asc">trace2.asc</a></span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p23820"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
</pre></td><td class="code" id="p238code20"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> trace2<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">data</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">typeof</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">data</span><span style="color: #66cc66;">&#41;</span> == <span style="color: #ff0000;">&quot;object&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">data</span> <span style="color: #0066CC;">instanceof</span> Stream <span style="color: #66cc66;">||</span> <span style="color: #0066CC;">data</span> <span style="color: #0066CC;">instanceof</span> File <span style="color: #66cc66;">||</span> <span style="color: #0066CC;">data</span> <span style="color: #0066CC;">instanceof</span> <span style="color: #0066CC;">LoadVars</span> <span style="color: #66cc66;">||</span>
<span style="color: #0066CC;">data</span> <span style="color: #0066CC;">instanceof</span> <span style="color: #0066CC;">XML</span> <span style="color: #66cc66;">||</span> <span style="color: #0066CC;">data</span> <span style="color: #0066CC;">instanceof</span> <span style="color: #0066CC;">XMLSocket</span> <span style="color: #66cc66;">||</span> <span style="color: #0066CC;">data</span> == application<span style="color: #66cc66;">&#41;</span>	<span style="color: #66cc66;">&#123;</span>
<span style="color: #808080; font-style: italic;">//</span>
<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">data</span>.<span style="color: #0066CC;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span><span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">data</span> <span style="color: #0066CC;">instanceof</span> <span style="color: #0066CC;">SharedObject</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
<span style="color: #000000; font-weight: bold;">var</span> dat = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Object</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #808080; font-style: italic;">//</span>
<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;[object SharedObject name=&quot;</span>+<span style="color: #0066CC;">data</span>.<span style="color: #0066CC;">name</span>+<span style="color: #ff0000;">&quot;]&quot;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #808080; font-style: italic;">//</span>
<span style="color: #000000; font-weight: bold;">var</span> props = <span style="color: #0066CC;">data</span>.<span style="color: #006600;">getPropertyNames</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">var</span> i <span style="color: #b1b100;">in</span> props<span style="color: #66cc66;">&#41;</span>	<span style="color: #66cc66;">&#123;</span>
<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>props<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
<span style="color: #000000; font-weight: bold;">var</span> o = <span style="color: #0066CC;">data</span>.<span style="color: #0066CC;">getProperty</span><span style="color: #66cc66;">&#40;</span>props<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>&quot;</span>+props<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span>+<span style="color: #ff0000;">&quot; = &quot;</span> + objString<span style="color: #66cc66;">&#40;</span>o<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
<span style="color: #808080; font-style: italic;">//</span>
<span style="color: #66cc66;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #66cc66;">&#123;</span>
<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>objString<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">data</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #66cc66;">&#123;</span>
<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">data</span>.<span style="color: #0066CC;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/*將內容對象轉換成字符串
* @param data	要被轉換的對象
* @param ignore	需要跳過的屬性
*/</span>
<span style="color: #000000; font-weight: bold;">function</span> objString<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">data</span>, ignore<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
<span style="color: #000000; font-weight: bold;">var</span> msg;
<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">typeof</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">data</span><span style="color: #66cc66;">&#41;</span> == <span style="color: #ff0000;">&quot;object&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">data</span> <span style="color: #0066CC;">instanceof</span> <span style="color: #0066CC;">Array</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
msg = objectString<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">data</span>, ignore, <span style="color: #ff0000;">&quot;Array&quot;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span><span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">data</span> <span style="color: #0066CC;">instanceof</span> <span style="color: #0066CC;">Object</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
msg = objectString<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">data</span>, ignore, <span style="color: #ff0000;">&quot;Object&quot;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span><span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">data</span> <span style="color: #0066CC;">instanceof</span> Client<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
msg = <span style="color: #ff0000;">&quot;[object Client ip=&quot;</span> + <span style="color: #0066CC;">data</span>.<span style="color: #006600;">ip</span> + <span style="color: #ff0000;">&quot; uri=&quot;</span>+<span style="color: #0066CC;">data</span>.<span style="color: #006600;">uri</span>+<span style="color: #ff0000;">&quot; args=&quot;</span> + objString<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">data</span>.__ARGUMENTS__, <span style="color: #0066CC;">data</span><span style="color: #66cc66;">&#41;</span>+<span style="color: #ff0000;">&quot;]&quot;</span>;
<span style="color: #66cc66;">&#125;</span><span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">data</span> <span style="color: #0066CC;">instanceof</span> <span style="color: #0066CC;">NetConnection</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
msg = <span style="color: #ff0000;">&quot;[object NetConnection connected=&quot;</span> + <span style="color: #0066CC;">data</span>.<span style="color: #006600;">isConnected</span> + <span style="color: #ff0000;">&quot; uri=&quot;</span>+<span style="color: #0066CC;">data</span>.<span style="color: #006600;">uri</span>+<span style="color: #ff0000;">&quot;]&quot;</span>;
<span style="color: #66cc66;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #66cc66;">&#123;</span>
msg = <span style="color: #0066CC;">data</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #66cc66;">&#123;</span>
msg = <span style="color: #0066CC;">data</span>.<span style="color: #0066CC;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #808080; font-style: italic;">//</span>
<span style="color: #b1b100;">return</span> msg;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/*
將參數中的對象轉換成字符串。此函數與objString的區別是，objString轉換所有的對象類型，而objectString僅轉換Object對象類型
* @param data	要被轉換的對象
*/</span>
<span style="color: #000000; font-weight: bold;">function</span> objectString<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">data</span>, ignore, <span style="color: #0066CC;">type</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
<span style="color: #808080; font-style: italic;">/*由于Remoting返回的實際上是關聯數組而非對象，因此這些“對象”其實屬于Array類型
这样就给判断真正的类型造成了难度。因为联合数组实际上是没有length属性的，必须用for in循环来获取其中的值
通过判断length是否存在，是用不同的循环获取
*/</span>
<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">type</span> == <span style="color: #ff0000;">&quot;Array&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">data</span>.<span style="color: #0066CC;">length</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
<span style="color: #000000; font-weight: bold;">var</span> msg = <span style="color: #ff0000;">&quot;[&quot;</span>;
<span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">var</span> i=<span style="color: #cc66cc;">0</span>; i<span style="color: #66cc66;">&lt;</span><span style="color: #0066CC;">data</span>.<span style="color: #0066CC;">length</span>;<span style="color: #66cc66;">&gt;</span>
<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">data</span><span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span> == ignore<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
<span style="color: #b1b100;">continue</span>;
<span style="color: #66cc66;">&#125;</span>
msg += objString<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">data</span><span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>i <span style="color: #66cc66;">!</span>= <span style="color: #0066CC;">data</span>.<span style="color: #0066CC;">length</span> - <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
msg += <span style="color: #ff0000;">&quot;, &quot;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
msg += <span style="color: #ff0000;">&quot;]&quot;</span>;
<span style="color: #b1b100;">return</span> msg;
<span style="color: #66cc66;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #66cc66;">&#123;</span>
<span style="color: #808080; font-style: italic;">//如果是关联数组，就把它变成一个真正的对象，并调用对象处理程序</span>
<span style="color: #000000; font-weight: bold;">var</span> o = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Object</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">var</span> i <span style="color: #b1b100;">in</span> <span style="color: #0066CC;">data</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
o<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span> = <span style="color: #0066CC;">data</span><span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #b1b100;">return</span> objectString<span style="color: #66cc66;">&#40;</span>o, <span style="color: #000000; font-weight: bold;">null</span>, <span style="color: #ff0000;">&quot;Object&quot;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span><span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">type</span> == <span style="color: #ff0000;">&quot;Object&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
<span style="color: #808080; font-style: italic;">//如果是真正的Object</span>
<span style="color: #000000; font-weight: bold;">var</span> msg = <span style="color: #ff0000;">&quot;{&quot;</span>;
<span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">var</span> i <span style="color: #b1b100;">in</span> <span style="color: #0066CC;">data</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">data</span><span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span> == ignore<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
<span style="color: #b1b100;">continue</span>;
<span style="color: #66cc66;">&#125;</span>
msg += i + <span style="color: #ff0000;">&quot;:&quot;</span> + objString<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">data</span><span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;
msg += <span style="color: #ff0000;">&quot;, &quot;</span>;
<span style="color: #66cc66;">&#125;</span>
msg = msg.<span style="color: #0066CC;">slice</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0</span>, -<span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span>;	<span style="color: #808080; font-style: italic;">//去掉最后的一个逗号和一个空格</span>
msg += <span style="color: #ff0000;">&quot;}&quot;</span>;
<span style="color: #b1b100;">return</span> msg;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://zengrong.net/post/238.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

