<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Flash - 葵中剑]]></title><description><![CDATA[Just Sword Wang's Blog]]></description><link>https://swordair.com/</link><image><url>https://swordair.com/favicon.png</url><title>Flash - 葵中剑</title><link>https://swordair.com/</link></image><generator>Ghost 3.42</generator><lastBuildDate>Fri, 26 Dec 2025 01:22:15 GMT</lastBuildDate><atom:link href="https://swordair.com/tag/flash/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Web发展路向何方？]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>记得是2005年，但也许更早，前端工程师这个职位开始在中国出现。如果再往前推，CSS的发展不过是十几年，HTML也才是个20岁风华正茂的小伙子。现在HTML5和CSS3，带来了诸多新的变革，web发展是日新月异还是略显老态？</p>
<h2 id>浏览器路向何方？</h2>
<p>曾经名赫一时的各种壳浏览器还剩下多少呢？像 IE green browser 这样的壳还有人在用么？主流里剩下了遨游，世界之窗，以及一干插足者。360和世界之窗的合作生出来个360浏览器，凭借360客户端数量和安全的旗号割据一方。搜狗打出了双核的旗号也同样凭借着输入法的装机量分到了自己的一杯羹。腾讯，仍旧是凭借其QQ加以推广。也许后来者还会有百度和阿里巴巴，今天的新闻又看到一个新的插足者——金山。</p>
<p>这种混乱的局面以前也曾经出现过，但过往的各种壳的特点是草根气息，现在的壳却都是大腕在暗自部署他们的客户端。但对普通用户来说，浏览器其实都是类似，他们不关心能不能用方便的插件，他们可能更关心隐私和安全，这也是360成功的原因。双核可能是个趋势，webkit被加壳后的影响是广泛的，更多的网站需要考虑兼容标准而不仅仅是IE。这几年，非常欣喜地看到整个Web向标准大幅迈进，但是这么多搅局的浏览器又让前景显得扑朔迷离。</p>
<p>通常，测试仅仅围绕内核，但是总是会有壳浏览器莫名奇妙不一致的时候。对于双核浏览器这种倾向更加的明显。有的时候我也在想，是不是三核浏览器也会加入新的力量？Lunascape那号称全球唯一的三核浏览器，其名号也就不能标榜的如此显眼了:)</p>
<p>各种壳，</p>]]></description><link>https://swordair.com/what-is-the-future-of-web-development/</link><guid isPermaLink="false">59fe0cf19855590d8c9146ea</guid><category><![CDATA[Alibaba]]></category><category><![CDATA[Flash]]></category><category><![CDATA[HTML5]]></category><category><![CDATA[CSS]]></category><dc:creator><![CDATA[Sword Wang]]></dc:creator><pubDate>Mon, 04 Oct 2010 22:35:34 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>记得是2005年，但也许更早，前端工程师这个职位开始在中国出现。如果再往前推，CSS的发展不过是十几年，HTML也才是个20岁风华正茂的小伙子。现在HTML5和CSS3，带来了诸多新的变革，web发展是日新月异还是略显老态？</p>
<h2 id>浏览器路向何方？</h2>
<p>曾经名赫一时的各种壳浏览器还剩下多少呢？像 IE green browser 这样的壳还有人在用么？主流里剩下了遨游，世界之窗，以及一干插足者。360和世界之窗的合作生出来个360浏览器，凭借360客户端数量和安全的旗号割据一方。搜狗打出了双核的旗号也同样凭借着输入法的装机量分到了自己的一杯羹。腾讯，仍旧是凭借其QQ加以推广。也许后来者还会有百度和阿里巴巴，今天的新闻又看到一个新的插足者——金山。</p>
<p>这种混乱的局面以前也曾经出现过，但过往的各种壳的特点是草根气息，现在的壳却都是大腕在暗自部署他们的客户端。但对普通用户来说，浏览器其实都是类似，他们不关心能不能用方便的插件，他们可能更关心隐私和安全，这也是360成功的原因。双核可能是个趋势，webkit被加壳后的影响是广泛的，更多的网站需要考虑兼容标准而不仅仅是IE。这几年，非常欣喜地看到整个Web向标准大幅迈进，但是这么多搅局的浏览器又让前景显得扑朔迷离。</p>
<p>通常，测试仅仅围绕内核，但是总是会有壳浏览器莫名奇妙不一致的时候。对于双核浏览器这种倾向更加的明显。有的时候我也在想，是不是三核浏览器也会加入新的力量？Lunascape那号称全球唯一的三核浏览器，其名号也就不能标榜的如此显眼了:)</p>
<p>各种壳，伴随这各种势利的目的应运而生。他们的内核，无非是Trident，以及webkit。就像Adobe的AIR选择了Webkit一样，它们的第二核也同样选了webkit。这并不是巧合，webkit的开放和快速，开源软件的生命力可能正是其崛起的关键。随着时间的流逝，将来这些壳会剩下多少呢？</p>
<p>这种核，素来已久地继续着他们的发展。四大排版引擎，Trident(IE)、Gecko(Firefox, Seamonkey)、WebKit(Safari, Chrome)以及Presto(Opera)之间的共存渐渐在失去平衡。我记得以前听到过这么一句话，桌面操作系统只会有两个，一个是Windows，另一个是Unix/Linux。这样的话用在浏览器内核一样是合适的。即使出现了第五种挤入主流的内核，其近况可能也和现在的Opera无异。所以Google没有写新的内核，而是进驻了webkit社区。如此以来技术上的天平出现了第一次真正意义上的倾斜，使得webkit成为了当今发展最快的内核。</p>
<p>Trident 划江而治，WebKit 则趁势而起。Gecko 继续尽心尽责地支持着标准，Presto 则继续边缘化。我觉得他们一个都不会倒下，IE不会倒自然不用说，webkit正是风华之年，Firefox很大程度上体现了标准，Opera有它独特的天性。有一点趋势很明显，标准正在扩散，并且随着IE9的出世，达到一个高峰。</p>
<h2 id="css">CSS路向何方？</h2>
<p>这并不是个匪夷所思的问题，因为标准对于单纯的重构来说是一把双刃剑。也许有一天我们欣喜地看到了标准的盛行，也许前端人员终于可以不在为各种兼容性问题而苦恼，但随之而来的是技术门槛的降低和整个行业的泛化。作为一种技术，核心难度损失掉的话，要被复制就太过容易了。5年前真的有这么多前端工程师么？而5年后，CSS真的还会有很大的难度么？</p>
<p>对于CSS样式表来说，它的本质是描述性的。既然是描述性的，必然不涉及自身逻辑上的难度。换句话说，控制CSS需要的不是逻辑力，而是想象力！是视觉！是复用出来的严谨！前两者自然不用多说，复用出的严谨是什么？复用的代码，从某种意义上来，是在实际中被复用出来的，而不是一开始被设计出来的。这称的上是一种熟能生巧。我相信任何人可以在工作中总结他自己的CSS复用和严谨的规则，怎么避免非标准的用法，怎么避免浏览器的兼容问题，怎么优化自己的样式。差异可能只是快慢和风格上的问题。</p>
<p>换言之，我隐隐感觉标准正在扼紧CSSer的生存空间。当标准真正被遵守，是否还需要这么多人“专门地”来重构？简单统一化的布局和样式，一定渐渐成为一种附属，并且特别是在小公司。这让我想到一个相似的例子：</p>
<blockquote>
<p>曾经，一个qmail邮件系统的大师，可能只是一个熟知如何为老迈的qmail增打各种补丁方法的人。</p>
</blockquote>
<p>一样的道理，熟知各种兼容写法和bug解决途径的CSSer，也一定会渐渐丧失其独特的优势。</p>
<p>但我们一样看到了CSS3，承载着新的希望。我们看到了绚丽的各种效果，阴影、渐变、圆角、旋转，甚至是投影、动画。于是，人们惊呼CSS绘制的图标、画像和CSS创造的动画效果，因为那是CSS做的！创想构建的这些新的CSS应用，很多是华丽而不实用的。花费数十倍的时间去绘制这么一个图标是否值得？如果真的到实际应用，那仅仅只代表着一个程序员的执着追求。如果所有的人都把时间花在这种地方，真不知道是福还是祸。</p>
<p>但是，改变影响整个Web发展，CSS3的贡献相当有限。换句话讲，虽然CSS3带来了更多美妙的web效果，但是引领web发展的不是CSS3，而是HTML5。</p>
<h2 id="flash">Flash路向何方？</h2>
<p>HTML5和Flash的争论，其实没什么意义。HTML5取代不了Flash，反过来，让Flash取代HTML则更加荒谬。Flash擅长的是图形，要把它做成万能的平台是Adobe一厢情愿的野心。</p>
<p>这次乔布斯和Adobe的争论里，Adobe确实是有些理亏的。且不论Flash作为一个公司的技术，乔布斯自然有抵制的理由。更多的是Adobe Flash没能发挥长处而只是在谋求富互联网应用的霸主地位。虽然Windows平台表现还尚可，但是Flash在其他平台的表现一直平平，甚至能用糟糕来形容。这次Android版的FlashPlayer继承了其在Linux系统上的糟糕表现，狠狠被人抓了一把，甚至很多人开始相信乔布斯。</p>
<p>我写过一段时间AS，我能理解Flash的很多优势。虽然我欣喜地看到了canvas里像素级的控制方法，但是整体上图形能力和flash仍然差的很远。另外拥有成熟的开发环境，这也是完胜当前的JS的。也许我们以后能看到越来越多的JS的游戏，但是flash显然能做的更好，更快。</p>
<p>HTML5和CSS3，只是减少了flash的一些应用。Flash也一定会长期和浏览器共存下去。至少在新的标准里还没有能可以匹敌的替代方案前，并且还没有完整好用的IDE前，flash在游戏和图形方面，仍旧是一颗常青树。</p>
<p>至于JavaScript，HTML5和CSS3的到来，一定会让JavaScript承载的更多。</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Flash捕获实时视频]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>使用Flash Media Live Encoder ，可以非常方便的录制实时视频(live video)。Flash Media Live Encoder 的选项很多而且很细，品质控制也很不错。如何在AS3中实现这些？</p>
<p>参考FMS的Help，我简单的封装了这样一个类：</p>
<pre><code>package com.swordair.as3
{	
	/**
	 * 
	 * @author iifksp
	 * 
	 */
	import flash.events.NetStatusEvent;
	import flash.media.Camera;
	import flash.media.Microphone;
	import flash.net.NetConnection;
	import flash.net.NetStream;

	public class LiveVideoCapturer
	{
		private var nc:NetConnection; 
		private</code></pre>]]></description><link>https://swordair.com/capture-live-video-in-flash/</link><guid isPermaLink="false">59fe0cf19855590d8c9146b2</guid><category><![CDATA[ActionScript3]]></category><category><![CDATA[Flash]]></category><dc:creator><![CDATA[Sword Wang]]></dc:creator><pubDate>Fri, 05 Feb 2010 16:29:48 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>使用Flash Media Live Encoder ，可以非常方便的录制实时视频(live video)。Flash Media Live Encoder 的选项很多而且很细，品质控制也很不错。如何在AS3中实现这些？</p>
<p>参考FMS的Help，我简单的封装了这样一个类：</p>
<pre><code>package com.swordair.as3
{	
	/**
	 * 
	 * @author iifksp
	 * 
	 */
	import flash.events.NetStatusEvent;
	import flash.media.Camera;
	import flash.media.Microphone;
	import flash.net.NetConnection;
	import flash.net.NetStream;

	public class LiveVideoCapturer
	{
		private var nc:NetConnection; 
		private var ns:NetStream; 
		private var cam:Camera; 
		private var mic:Microphone;

		public function LiveVideoCapturer(address:String = null)
		{
			nc = new NetConnection(); 
			nc.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus); 
			nc.connect(address);
			nc.client = this;
		}
		public function onBWDone():void{
		}
		private function onNetStatus(event:NetStatusEvent):void{ 
			trace(event.info.code); 
				if(event.info.code == &quot;NetConnection.Connect.Success&quot;){ 
					publishCamera();
			}
		}
		private function publishCamera():void{ 
			cam = Camera.getCamera(); 
			cam.setMode(640,480,20);
			cam.setQuality(50000,90);
			mic = Microphone.getMicrophone(); 
			ns = new NetStream(nc); 
			ns.attachCamera(cam); 
			ns.attachAudio(mic); 
			ns.publish(&quot;swordair&quot;, &quot;live&quot;);
		}
	}
}
</code></pre>
<p>这个类简单的获取摄像头和麦克风，然后调用<code>NetStream</code>对象<code>ns</code>的<code>attachCamera</code>和<code>attachAudio</code>将其附加，最后通过对象<code>ns</code>的<code>publish()</code>方法发布到Flash Media Server。</p>
<p>FMS会回调<code>ns</code>的<code>client</code>对象的<code>onBWDone()</code>方法，所以指定<code>client</code>并添加<code>onBWDone()</code>。这里将<code>client</code>指向类本身然后添加了一个public的<code>onBWDone()</code>方法供FMS调用。如果缺失<code>onBWDone()</code>方法，可能得到这样的错误：</p>
<pre><code>Error #2044: 未处理的 AsyncErrorEvent:。 text=Error #2095: flash.net.NetConnection 无法调用回调 onBWDone。 error=ReferenceError: Error #1069: 在 flash.net.NetConnection 上找不到属性 onBWDone，且没有默认值。
</code></pre>
<p>整个过程就是：获取资源 - 建立连接 - 发布；<code>ns.publish()</code>的两个参数分别是流的标识字符串和发布方式，发布方式可以使live(默认，不录制)、record(录制，覆盖同名)和append(录制，附加同名)。</p>
<p>如果要回放录制的视频，对于flash的<code>Video</code>而言，使用相同的连接<code>nc</code>创建一个<code>NetStream</code>对象，调用其<code>play()</code>方法，最后使用<code>Video</code>对象<code>attachNetStream()</code>播放该流。</p>
<pre><code>var nsPlayer = new NetStream(nc); 
nsPlayer.play(&quot;swordair&quot;); 
var vidPlayer = new Video(); 
vidPlayer.attachNetStream(nsPlayer); 
addChild(vidPlayer); 
</code></pre>
<p>对于Flex的<code>VideoDisplay</code>，可以简单的设置rtmp地址：</p>
<pre><code>&lt;mx:VideoDisplay 
	id=&quot;vd1&quot;
	source=&quot;rtmp://localhost/live/swordair&quot; 
	width=&quot;100%&quot; 
	height=&quot;100%&quot; 
	autoBandWidthDetection=&quot;false&quot; 
	live=&quot;true&quot; 
	maintainAspectRatio=&quot;true&quot;/&gt;
</code></pre>
<p>Flex4的<code>VideoPlayer</code>相当出色，可惜至少在我测试的时候(FlashBuilder4 beta 2 SDK Build 4.0.0.10485)，出现了严重的延迟问题。回放实时流的延迟甚至超过15秒钟，这简直无法忍受。最终放弃<code>VideoPlayer</code>而改用<code>mx:VideoDisplay</code>，延迟在2-3秒。也可能只是我的设置问题，但是<code>VideoPlayer</code>的相关参考还相对较少，希望Flex4正式可以解决这些可能存在的问题。</p>
<h4 id>参考资料</h4>
<p><a href="http://help.adobe.com/en_US/FlashMediaServer/3.5_Deving/WS5b3ccc516d4fbf351e63e3d11a0773d56e-7ff0.html">Adobe Flash Media Server 3.5 - Capturing live video</a></p>
<!--kg-card-end: markdown-->]]></content:encoded></item></channel></rss>