akihiro kamijo: Flash Player Archives

August 20, 2008

Flash Player 10 におけるセキュリティ変更

Flash Player 10 のリリース候補版が Adobe Labs に公開されています。(Flash Player 10@Labs) 何も無ければこのまま公開されるものですので、既存のコンテンツが正しく再生されるか、コンテンツ制作者やサイト管理者のみなさま検証よろしくお願いします。

さて、Flash Player 10 ではいくつかセキュリティ面での変更が行われています。これらは仕様ですので、こちらが原因で動作しなくなった場合にはコンテンツ側を修正することが必要です。以下、 3 + 1 点が変更された項目です。

1. メタポリシーが必須に

昨年公開された 9.0.115.0 からサポートされたメタポリシーファイルが、Flash Player 10 以降では必須になります。ポリシーファイル (crossdomain.xml) をサイトのルート以外に置いている環境では影響を受けます。

自サーバから配信される全てのコンテンツのコントロールが可能な (勝手にポリシーファイルを配信されたりしない) 環境では、サイトルートのポリシーファイル (マスターポリシーファイル) にメタポリシーとして下のように all を設定するだけでよいと思います。

<cross-domain-policy>
  <site-control permitted-cross-domain-policies="all"/>
</cross-domain-policy>
 

詳細な管理が必要な環境では、要件に応じてメタポリシーを選択することができます。例えば、メタポリシーとして by-content-type を指定すると content-type が text/x-cross-domain-policy のファイルのみがポリシーファイルとして使用されるよう制限することができます。

<cross-domain-policy>
  <site-control permitted-cross-domain-policies="by-content-type"/>
</cross-domain-policy>
 

メタポリシーについては以前の記事 (メタポリシーを使った Flash Player セキュリティ管理) もご覧ください。

2. ソケット接続のタイムアウト

Socket および XMLSocket のオブジェクトに対して securityError イベントが connect() を呼んでから一定時間経過後にディスパッチされるようになります。この仕様変更により、直後にイベントが発生していたケースでも一定時間待つことになりますし、ネットワーク遅延等により接続に時間がかかった結果として securityError がディスパッチされるというケースも発生します。

待ち時間は timeout という属性に設定します。デフォルト値は 20,000 (20 秒) です。

AIR アプリケーションに関しては、Flash Player 10 の機能が統合されてもこの変更の影響は受けない予定のようです。

3. ファイルアップロード/ダウンロードの呼び出し制限

FileReference.browse() と FileReference.download() の呼び出しが、ユーザ操作により発生したイベント内に制限されるようになります。Flsh Player 10 以降、これらのメソッドを使用するには、マウスのクリックやキーの押下等によるイベントから呼び出すよう記述する必要があります。

この件も AIR アプリケーションは影響を受けない予定です。

4. フルスクリーンモードでのキーボードの使用

この点に関してはセキュリティが少し緩和されます。Flash Player 10 からは、フルスクリーンモードで、タブ・スペース・上下左右の矢印が利用できるようになります。

AIR では stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE と設定することでこの機能が使えます。

Posted by ackie at 05:58 PM | Comments (1)

July 18, 2008

Adobe Pixel Bender Toolkit の Preview Release 4 公開

Pixel Bender の新しいバージョンが公開されました。(Pixel Bender Toolkit@Labs) 今回は Preview Release 4 です。基本的にはバグフィックスが行われたくらいで、大きな変更はありません。

Posted by ackie at 06:06 PM | Comments (0)

July 04, 2008

Flash Player 10 ベータ 2 公開

Adobe Labs に Flash Player 10 ベータ 2 が公開されています。(Flash Player 10@Labs

Flash Player 10 からは Windows 98 および OSX 10.1 - 10.3 がサポートされません。一方 Linux では Ubuntu サポートが追加されました。その他のディストリビューションについては RHEL 5 と SUSE 10.3 がサポートされます。

ダウンロードは、こちらのページからどうぞ。(Flash Player 10 Download@Labs) ベータ 1 の記事 (Flash Player 10 beta 公開) に少し詳しい説明がありますが、インストール前に現在インストールされている全ての Flash Player のアンインストールが必要です。

今回追加された機能は以下のとおりです。

  • Sound API の拡張: オーディオデータを ByteArray として利用したり、バッファの状態を検知することができます。
  • Linux WMODE : Linux 上での WMODE がサポートされました。ただし、使用できるブラウザは Firefox 3 限定です。
  • Video4Linux v2 : Linux で動画などを扱う Video4Linux v2 (V4L2) の API がサポートされました。
  • unloadAndStop API : 読み込んだコンテンツに対してこの API を呼ぶと直ちに音の再生を停止やイベントリスナの削除が行われます。AS3 で AS2 のアンロードと似た動作が実現できます。
  • フルスクリーンモードでのキーボードサポート : エンターキーやシフトキーなど限定されたキーのイベントがサポートされます。

その他、たくさんのバグフィックスが行われています。

(追記)

ASDoc も更新されています。 (flashplayer10_as3langref_070208.zip :6.81MB

Posted by ackie at 12:18 PM | Comments (2)

July 01, 2008

Flash 検索の改善についての発表

Adobe から検索エンジン用に最適化された Flash Player テクノロジーの Google と Yahoo! に対する提供について発表がありました。これにより検索エンジンはキーワードの抽出に Flash Player の機能を利用することができるため、動的に生成される画面や実行時に読み込まれるリソースもインデックス作成の対象にすることが可能になります。

まずは、先の 2 社と協力して検索エンジンの SWF コンテンツ対応改善に取り組むことになっていますが、将来的には一般の開発者まで Flash Player の検索対応機能を利用できるような方向で考えたいとのことだそうです。

Posted by ackie at 07:44 PM | Comments (0)

May 30, 2008

Flash Player 10 ベータのデバッグプレーヤ

Adobe Opensource Project の Flex 3 SDK Downloads ページから 3 月 16 日以降の Adobe Flex SDK Nightly Build をダウンロードすると Flash Player 10 ベータのデバッグプレーヤが runtimes/player/10 の下に含まれています。Flash Player 10 ベータのデバッグプレーヤが欲しいというお問い合わせがありましたので情報を共有しておきます。

Posted by ackie at 06:51 PM | Comments (0)

Flash Player の脆弱性の件のフォロー

Flash Player の脆弱性の件については、最新版で対応済みという見解で落ち着いたようですが、あくまで最新版では修正済みという話ですので、まだ以前のバージョンをお使いの方は速やかにアップデートするようにして下さい。

バージョンの確認: Flash Player 製品ページ

最新版へのアップデート: Flash Playerダウンロードセンター

先日公開された Flash Player 10 ベータでは今回問題になった脆弱性には対応済みとのことです。いちおう。

Posted by ackie at 06:47 PM | Comments (0)

May 29, 2008

Flash Player の脆弱性に関する件のアップデートです

Flash Player の脆弱性に関する一昨日からニュースの件について Adobe の製品セキュリティチーム blog にアップデートがありました。(Potential Flash Player issue - update

それによると、今回のアタックは 一部に報道されていたように zero-day アタックではなく、最新のバージョンである Flash Player 9.0.124.0 では再現しないことが Symantec 社により確認されたそうです。ただし、この blog 記事の内容は Adobe からの正式な発表ではありませんので、あくまで経過報告としてお伝えしている旨ご了解ください。

Posted by ackie at 11:55 AM | Comments (0)

May 22, 2008

Flash Player 10 の新テキストエンジンとマークアップ言語

まず、Adobe Labs に Flash Player 10 ベータの ASDoc が公開されています。(flashplayer10_as3langref_052008.zip: 6.46MB) それから、Flash Player 10 用 Flex SDK の Nightly Build (安定していないビルド) がダウンロードできます。(Flex 3 SDK Downloads) May 15 以降のビルドをダウンロードすれば Flash Player 10 の新しい機能を使ったアプリ開発ができます。

さて、今日の本題です。既報のとおり、Flash Player 10 には新しい高機能なテキストエンジンが搭載されます。上でご紹介した ASDoc には flash.text.engine というパッケージ (FTE と呼ばれています) が追加されていますが、縦書きやマルチカラムといった新しい機能を利用するには、この FTE の API を使うことになります。

ところが、FTE は低レベルの API なので、これを使いこなすには新しいテキストエンジンの構造をきちんと理解する必要があります。つまり、 かるく試してみるにはちょっと敷居が高いのです。

そのため、もう少し簡単にテキストフォーマットを記述するための新しいマークアップ言語が提供される予定です。

Labs に公開されているデモ (Flash Player 10 Feature Demos and Videos@Labs) から新しいマークアップ言語 (Vellum というコードネームで呼ばれています) のサンプルコードをダウンロードすることが可能です。デモコンテンツの "NEW TEXT ENGINE" ボタンをクリックして表示されたコンテンツの下部にある "DOWNLOAD SOURCE" をクリックすると as ファイルを含んだ zip ファイルをダウンロードできます。

zip ファイルを開くと NewTextEngine.as というファイルがあるので、中を見ると以下のような記述が見つかると思います。

<XFL xmlns:flow='http://vellum/prerelease'>
  <flow:TextFlow columnCount='2'>
    <flow:p fontFamily='Helvetica' fontSize='12' color='0xFFFFFF' marginLeft ="10" marginRight="10">
      <flow:span>Layout and style text with tables, inline images and multi-column flow by using components that are compatible with both Flex and Flash while getting the benefits of the new text engine.</flow:span>
    </flow:p>
    <flow:p fontFamily='Helvetica' color='0xFFFFFF' fontSize='12' marginLeft ="10" marginRight="10" marginTop="12">
      <flow:span>The text in these two columns is dynamic, selectable, and editable!</flow:span>
    </flow:p>
  </flow:TextFlow>
</XFL>
 
 

名前空間が http://vellum/prerelease であることから分かるように、まだ詳細な仕様が確定している訳ではありません。 このサンプルのポイントは、具体的な仕様を紹介することではなく、上のようなマークアップ言語が新しく提供される事を伝えることだと思われます。

もちろん、FTE が公開されているわけですから、このマークアップ言語以外にもいいアイデアがあったらどんどんオリジナルのテキストコンポーネントを開発することができますね。

Posted by ackie at 07:27 PM | Comments (0)

May 19, 2008

Flash Player 10 の GPU サポート機能について

Flash Player 10 の GPU サポートについて Flash Player チームのスペシャリストの Tinic が blog で説明しています。(What does GPU acceleration mean?) 現時点での貴重な情報なので、ポイントのみですが以下かいつまんで和訳してみます。

Flash Player 10 から wmode に direct と gpu の 2 つのモードが新しく追加されます。(Flash Player 9 では、normal, transparent, opaque の 3 つ) それぞれのモードの動作は、

  • direct モード : 画面に最短パスで描画したい時に使います。このモードでは、ブラウザが表示する領域と Flash Player の表示領域が重なっても大抵ブラウザ側が無視されます。ビデオ再生での使用が主に想定されています。
  • gpu モード : グラフィックカードの機能を利用して描画オブジェクトの合成を行います。個々のムービークリップの描画は従来どおりソフトウェアが行います。

これらの新しい GPU サポートモードを利用する前には、まず下記の注意事項をご覧ください。

1.グラフィックカードの機能を使用したからといって必ずしも描画が早くなるわけではありません。むしろ、遅くなる場合のほうが多い可能性もあります。GPU の効果を引き出すには、コンテンツをデザインする際 GPU の動作を理解しそれに合わせて設計する必要があります。そのためのデザイナ向けのガイドはできるだけ早い時期に提供できるようにしたいと考えています。

2.GPU の効果を体感するにはそれなりに高速なビデオカードが必要です。Vista の Aero Glass モードでも重たく感じない程度のスペックが目安になるようです。

3.ピクセルレベルでの表示は環境により変わる可能性があります。(テキストのエッジがぼやけた感じになるとか) 場合によっては色が一致しないこともあるようです。Flash Player から表示をコントロールできない範囲でビデオカードが処理してしまうとこのようなことが起こります。

4.フレームレートの最大値は画面のリフレッシュレート以下に制限されます。フレーム落ちなども考慮すると、direct や gpu モードではフレームレートは実質 50-55 辺りまでになりそうです。

5.ブラウザ内に direct や gpu モードを利用してコンテンツを表示すると多くの CPU やメモリ資源を必要とします。ですので HTML ページのほとんどの表示領域を一つの SWF が専有するような場合のみ使用することをお勧めします。間違ってもバナーにこのモードを指定することは避けましょう。

6.GPU サポート機能はビデオカードのデバイスドライバと密接に関連しています。つまり、新しいモードではコンテンツ再生の環境依存度が高くなります。Flash Player はインストールされていてもコンテンツの表示できないユーザが少なからず出てくる可能性があるということです。

最後に、現在公開されているベータ版はパフォーマンスチューニングがまだ十分でないこと、まったく新しい機能のために多くのバグが予想されることをご理解のうえ、いろいろと試していただければと思います。GPU サポートに関しては最初の一歩を踏み出したところですので、今後だんだんと改良されていくと思います。

Posted by ackie at 06:15 PM | Comments (0)

May 15, 2008

Flash Player 10 beta 公開

咋秋から Astro のコードネームで情報公開されていた Flash Player 10 のベータ版が Adobe Labs に公開されました。(Flash Player 10 beta@Labs

ダウンロードページはこちらです。(Flash Player 10 download@Labs) インストーラは英語ですが各国語 OS 上でインストール可能です。Flash Player 10 beta はまだ開発の早い段階ですので、テスト用の環境以外へのインストールはあまりお勧めいたしません。

インストール前には必ず現在インストールされている Flash Player をアンインストールしてください。アンインストーラはテックノート内から必要なプラットフォーム用をダウンロードして使います。(Technote:How to uninstall the Adobe Flash Player plug-in and ActiveX control) Windows IE 用は、コマンドプロンプトから /clean のオプション付で実行します。

Flash Player 10 beta をインストールすると機能紹介ビデオを見ることができます。デモページはこちらです。(Feature Demos and Videos@Labs

以下、主な新機能を簡単に紹介します。

  • 3D Effects - 画面上のオブジェクトを簡単に 3 次元の空間内で変形させることができます。通常の 2D オブジェクトと同様のインタラクションを持たせることが可能です。
  • Custom Filters and Effects - カスタムのビジュアル効果を実現するフィルタを作成して、ランタイムに使用することができるようになります。フィルタの作成には Pixcel Bender Toolkit を使用します。
  • Advanced Text Layout - 新しいテキストエンジンはランタイムの縦書きや右から左へのテキストをサポートします。また、デバイスフォントを埋め込みフォントのように扱う (例えばアンチエイリアスやフィルタ) こともできます。
  • Enhanced Drawing API - 3D 効果を描画するための API や、ランタイムにいちいち再描画することなく変更できるシェイプを作成する機能などが追加されています。(注:これは 2D オブジェクトを 3D っぽく扱う機能で、3D モデリングされたオブジェクトを扱うものではありません)
  • Visual Performance Improvements – GPU の機能を利用してアプリケーションやビデオの再生を高速に行える機能が実装されます。
  • Vector Data Type – AS3 の新しい型である Vector (ES4 の新しい型で、全ての要素が同じ型のオブジェクトである配列)の追加により、Array と比較して同様の処理を非常に高速に行うことができるようになりました。
  • File Reference runtime access - ダイアログボックスで選択されたファイルの内容を ByteArray やテキストとして AS3 で扱うことができるようになります。変更して保存する場合にもサーバを経由する必要が無くなります。
  • Dynamic Sound Generation - Sound クラスが拡張され、動的に作成したオーディオコンテンツを再生することができます。
  • Large Bitmap Support - 16,777,216 ピクセル (4096 × 4096) のビットマップまで扱えるようになります。一辺の最大は 8191 ピクセルです。

既存のコンテンツで正しく再生できないものが見つかった場合には Flash Player 10 Forum にお知らせください。

Posted by ackie at 05:30 PM | Comments (2)

May 07, 2008

Open Screen Project (デバイス向け Flash Planer/AIR)

先週 Adobe 本社から Open Screen Project が発表されました。(Open Screen Project

このプロジェクトの目的は、携帯や家電製品などの様々なデバイス上で、一貫した実行環境としての Flash Player (将来的には AIR も含め) の実装を推進することです。PC 環境では、Flash Player が OS やブラウザに非依存の実行環境として普及していますが、同様の環境をデバイス上にも実現することで、PC からデバイスまで統一された体験を提供することができるようにしたいという取り組みです。

そのために、Flash テクノロジーのライセンスに関して以下のような変更が行われます。(正確な内容は上記のサイトから確認してください)

  • Flash (SWF) および Flash Video (FLV/F4V) フォーマット仕様の利用目的に対する制限の廃止
  • Flash Player をデバイスにポーティングするための API の仕様公開
  • 携帯との通信に使用されている Flash Cast プロトコルと AMF プロトコルの公開
  • 次バージョンの Flash Player および AIR for devece のライセンス費の撤廃

最新の実行環境が一貫性を持って提供され続けること、ユーザが様々な環境から自由にコンテンツにアクセスできることを実現するために、デバイス開発会社からコンテンツプロバイダーまで様々な企業と協力していくことも発表されています。

Posted by ackie at 06:28 PM | Comments (3)

April 09, 2008

Flash Player 9.0.124.0 と Adobe AIR 1.0.1 公開

Flash Player 9 のアップデートが公開されました。新しいバージョンは 9.0.124.0 です。先日お知らせしたセキュリティ関連の脆弱性への修正対応が行われています。

あわせて、AIR のアップデートも公開されました。これは Flash Player のアップデートがそのまま適用されたもので、その他の仕様に関する変更点はありません。

Posted by ackie at 11:30 AM | Comments (1)

March 17, 2008

ソケットポリシーファイルと Flash Player セキュリティ

ソケットポリシーについて書こうと思っていたら既にちゃんとした記事が公開されていました。

ので、ここではごく簡単に。

ソケットポリシーファイルは Flash Player 7 の時に導入された機能で、XMLSocket や Socket を使った接続要求に対して、サーバ側でアクセス制御を行うための手段として使用されます。

ソケット経由の接続ポリシーに関して Flash Player 9.0.115.0 から変更された主要な点は、1.マスターポリシーファイルの導入、2.メタポリシーのサポート、3.より厳格なソケットポリシーの採用です。9.0.115.0 では、これらを満たしていない環境を警告として扱いますが (デバッグプレーヤだと警告メッセージをログにを出力できます) 来月のアップデート版以降はエラーとして扱うようになります。

とりあえず対処するには、以下のような内容を TCP のポート 843 から返すプログラムをサーバ上で実行します。allow-access-from タグ内の domain と to-ports 属性には実際の環境に合わせて適当な値を設定してください。

<cross-domain-policy>
  <site-control permitted-cross-domain-policies="master-only"/>
  <allow-access-from domain="mysite.com" to-ports="999,3050-3052/>
</cross-domain-policy>
 

さて、以下もう少しだけ詳しい説明です。

ソケットマスターポリシーファイル

接続にもマスターポリシーファイルのコンセプトが導入されました。HTTP 接続のマスターポリシーファイルは /crossdomain.xml ですが、ソケットマスターポリシーファイルは TCP のポート 843 から送られるポリシーファイルということになっています。

1024 以下の固定のポート番号を使用することで、ポリシーファイルの管理を、適切な権限を持つ管理者が標準化された方法で行えるようにしたいというのが意図のようです。なお、ポート 843 の使用に関しては現在 IANA に申請中とのことです。

ソケットメタポリシー

ソケットメタポリシーはソケットポリシーファイルの使用条件を設定するためのもので、マスターポリシーファイルのみに指定できます。このメタポリシーの利用もソケットマスターポリシーファイルが採用された理由の一つです。

メタポリシーの種類は以下の 3 つです。

  • all:ポリシーファイルをどのポートからも提供可能 (データを一般に公開しているサーバ向け)
  • master-only:ポート 843 からのみポリシーファイルの送信を許可
  • none:ポリシーファイルを不使用に (Flash Player からの接続を一切許可しない)

デフォルトのソケットメタポリシーは all です。

強化されたソケットポリシー

9.0.115.0 以降 Flash Player からソケット接続をするには、個々の接続が明示的にソケットポリシーファイルにより許可される必要があります。(前述のように 9.0.115.0 では警告扱いです)

Posted by ackie at 09:13 PM | Comments (0)

March 12, 2008

メタポリシーを使った Flash Player セキュリティ管理

メタポリシーは、昨年 12 月に発表された Flash Player セキュリティ関連の変更点のひとつです。 メタポリシーに間しては 4 月のセキュリティアップデートでの変更が行われないため、まだ対応しなくても直ぐに問題になることはありませんが、いずれ必須になることは明言されていますので早めに対応しておいたほうがよいかと思います。

さて、メタポリシーはサイト管理者がポリシーファイルを管理するための手段として提供されています。たとえば、管理者の知らないところで勝手にポリシーファイルを定義してアクセス許可を与えるといった状況を防ぐのに使えます。

メタポリシーはマスターポリシーファイル内に記することができます。マスターポリシーファイルはサイトのルートに置かれたポリシーファイル (/crossdomain.xml) です。マスターポリシーファイル内には今までどおり通常のポリシーも記述することができます。メタポリシーの記述には site-control タグを使用します。下はマスターポリシーファイルの例です。

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
  <site-control permitted-cross-domain-policies="all" />
  <allow-access-from domain="*" />
</cross-domain-policy>
 

誰でも自由にすべてのリソースにアクセスできるサイトであれば上の内容をそのまま使えばメタポリシーへの対応は完了です。とりあえず対応だけはしておこうという場合も、上のようにメタポリシーとして all を指定しておけば、将来 Flash Player がこの件でアップデートされても影響を受けません。

all を含め、メタポリシーとして指定できる値は 6 つあります。

  • all :
    全てのポリシーファイルを許可
  • by-content-type :
    Content-Type が text/x-cross-domain-policy のポリシーファイルを許可
  • by-ftp-filename :
    FTP サーバから crossdomain.xml という名前のポリシーファイルのみ許可
  • master-only :
    マスターポリシーファイルのみ許可
  • none :
    全てのポリシーファイルを不許可
  • none-this-response :
    特定のレスポンスでポリシーファイルを不許可

メタポリシーを指定するもうひとつの方法は HTTP ヘッダに記述することです。特に、上のリスト内の最後の none-this-response だけは、HTTP のレスポンスヘッダにしか記述できません。また、HTTP ヘッダを使用するときには none-this-response を除き全てのレスポンスに同じポリシーを指定する必要があります。下はその例です。

HTTP/1.1 200 OK
X-Permitted-Cross-Domain-Policies: none
 

HTTP レスポンスヘッダー内の値はマスターポリシーファイル内の値よりも優先されます。

Posted by ackie at 06:07 PM | Comments (0)

March 11, 2008

来月 (2008/4) の Flash Player セキュリティアップデート

Flash Player のセキュリティアップデートが来月予定されている旨の情報が US のサイトに公開されました。(Preparing for the Flash Player 9 April 2008 Security Update

このアップデートは純粋にセキュリティ改善を目的としたもので、新機能は一切ありません。しかし、デフォルトポリシーの変更などが行われるため、既存のコンテンツの中には動かなくなるものが出てくることも予想されます。

今回、事前に情報が公開されたのは、この変更に事前に準備する期間を確保するためです。以下、変更点の概要を説明しますので、影響を受けると思われるコンテンツがある場合は対応をご検討ください。

1. javascript のプロトコルとしての利用

これまでは loadMovie() メソッド等と使用して javascript を呼び出すことが可能でした。今度のアップデート以降は、getURL() か navigateToURL() または ExternalInterface のみで使用できるようになります。

2. allowScriptAccess の扱い

allowScriptAccess は swf からスクリプトへのアクセスを制御するための HTML タグに指定する属性です。既存のプレーやでは swf 7 以前のバージョンの swf に対しては allowScriptAccess = always が、 swf 8 以降のバージョンの swf に対しては allowScriptAccess = sameDomain がデフォルト値でした。

今後はすべてのバージョンの swf に対して sameDomain がデフォルトになります。そのため、swf 7 以前のバージョンでパブリッシュされた swf はスクリプトの呼び出しができなくなるケースがあります。その場合には、明示的に allowScriptAccess = always を指定してください。

3. HTTP ヘッダへの追加

XML.addRequestHeader()、 LoadVars.addRequestHeader()、 URLRequest.requestHeaders を利用すると、HTTP リクエストを送る際にヘッダに属性を追加することができます。ここに、新しいプレーヤからは、他のドメインのサーバにヘッダを追加して送信する際に、まず送り先のサイトの許可を確認するという動きが追加されます。

具体的には、受け側のサーバ上の crossdomain.xml に以下のようなエントリが必要になります。

<allow-http-request-headers-from domain="www.example.com" headers="HeaderName"/>
 

4. ソケット接続時のポリシーファイルが必須に

XMLSocket や Socket を使い接続をする際のポリシーファイルの条件が厳しくなります。アップデート後からは同じドメイン間の接続でも、個々の接続用またはポート 843 を介したマスターポリシーファイルが必要になります。

ソケットポリシーファイルについてはまた別の機会にもうちょっと詳しく説明したいと思います。

とりあえず今回は以上ですが、将来的にはメタポリシーの使用に関する変更があることなども既に発表されています。現在動いていても将来変更が必要な設定については、セキュリティログ (「Flash Player 9.0.115.0 セキュリティポリシー変更について」 内ログファイルの項参照) に警告として出力されるはずですので、サイトを管理されている方は一度確認してみることをお勧めします。

Posted by ackie at 05:17 PM | Comments (0)

December 21, 2007

Flash Player アンインストーラ情報

少し前から Flash Player の削除には専用のアンインストーラを使用するようになりましたが、9.0.115.0 の公開に伴いアンインストーラも更新されていますのでお知らせしておきます。最新のアンインストーラは常に次のリンク http://www.adobe.com/go/tn_14157 から入手できるようになっているようですので覚えておくとよいかもです。

Posted by ackie at 05:52 PM | Comments (0)

December 19, 2007

Flash Player セキュリティ情報

Flash Player のセキュリティ関連の情報が公開されましたのでご紹介します。

今回の発表に含まれる問題は先日公開された最新版の 9.0.115.0 で対応されており、すみやかにアップデートすることが推奨されています。問題の詳細とオーサリング環境用を含めた Flash Player のダウンロード用リンクが次の文書にまとめられています。(Flash Player update available to address security vulnerabilities) 日本語訳は近いうちに公開予定とのことです。

Flash 8 オーサリング環境用のアップデート方法のテックノートも公開されています。(Upgrading Flash Professional 8 and Flash Basic 8 with the Flash Player 9 Security Release

Flash Player 9 がサポートしない環境用には Flash Player 7.0.73.0 が公開されています。(Flash Player 7 for Unsupported Operating Systems) このテックノートによると、Flash Player 7 に関しては今回が最後のアップデートのことですので、今後はセキュリティ上の問題点が発見されても対応されないことになります。該当する OS をお使いの方はご注意ください。

Posted by ackie at 06:56 PM | Comments (3)

December 12, 2007

Flash Player 9.0.115.0 セキュリティポリシー変更について

先日公開された Flash Player 9.0.115.0 からいくつかのセキュリティポリシーが変更されています。そのため、新しいプレーヤをインストールすると今までは閲覧できていたコンテンツが表示されなくなる状態が発生する可能性があります。

今回の変更に関する情報及び対処方法については US サイトの DevNet に詳しく説明されています。(Security changes in Flash Player 9)日本語版も既に翻訳が開始されているとのことなので、近々日本のサイトにも記事が公開されることと思います。

今回はとりあえず主な変更点を 3 点簡単に説明しておきます。もし該当する状況にあたった場合には上記のドキュメントをご覧ください。

ポリシーファイルのフォーマット

ポリシーファイルが正しいフォーマットの XML ファイル以外は無視されるようになります。例えば、トップレベルのタグは <cross-domain-policy> である必要があります。

ポリシーファイルの正しいフォーマットについては、xsd ファイルがプロトコル毎に公開されています。ポリシーファイルの記述内容が正しいかどうかはこれらの xsd を参照することで確認できます。

  • http://www.adobe.com/xml/schemas/PolicyFile.xsd
  • http://www.adobe.com/xml/schemas/PolicyFileFtp.xsd
  • http://www.adobe.com/xml/schemas/PolicyFileHttp.xsd
  • http://www.adobe.com/xml/schemas/PolicyFileHttps.xsd
  • http://www.adobe.com/xml/schemas/PolicyFileSocket.xsd

9.0.115.0 のデバッグプレーヤからポリシーファイル用のログ機能が追加されていて、問題があればメッセージがログファイルに出力されるようになっています。フォーマットの確認はこっちを使った方が簡単かもしれません。

ドメイン内でのリダイレクト

ポリシーファイルへのリクエストがドメイン内でリダイレクトされた場合、9.0.115.0 からは最初にリクエストした URL ではなくリダイレクトされた先の URL に対するポリシーとして適用されるようになります。

例えば、http://example.com/foo/crossdomain.xml をリクエストしたら、http://example.com/bar/crossdomain.xml にリダイレクトされた場合、読み込まれたポリシーファイルの内容は http://example.com/bar/ 以下の URL へのリクエストに有効になります。

上で触れたログファイルにはリダイレクトの情報も出力されるため、ポリシーファイルへの要求がリダイレクトされたかどうかの確認にも使うことができます。

Content-type の値

9.0.115.0 から HTTP ヘッダの Content-Type が以下の値のどれかに含まれないと、読み込んだポリシーファイルを無効とみなします。

text/*
application/xml
application/xhtml+xml
 

これはポリシーファイルがテキストであることを多少なり保証するための変更です。

ソケット接続

9.0.115.0 から ActionScript によりソケット接続をする場合にはポリシーファイルが必須になります。

実際には、9.0.115.0 ではまだほとんどのケースで警告が表示されるだけで接続が可能です。とはいえ、ローカルサーバに接続している場合など、いくつかのケースで新しいルールに従ったポリシーファイルが必要になることがありますのでご注意ください。

ログファイル

最後に、ポリシーファイル用のログファイルの使い方です。

まず、新しいデバッグプレーヤをインストールします。ダウンロードは Flash Player サポートセンターから行うことができます。(Flash Player Support Center

次に mm.cfg ファイルを編集します。このファイルはユーザのホームディレクトリに置かれています。無い場合には新しく作成してください。ファイルには以下の 2 行を追加します。

PolicyFileLog=1   # ポリシーファイルのログを有効にする
PolicyFileLogAppend=1  # 起動時にログファイルをクリアしない(この指定はオプション)
 

PolicyFileLogAppend=1 を指定した場合にはファイルサイズがどんどん大きくなります。その点にはご注意ください。

以上で設定は完了です。Flash Player を再起動すると以下の場所に policyfiles.txt という名前のファイルが作成されると思います。

Windows: C:\Documents and Settings\username\Application Data\Macromedia\Flash Player\Logs
Windows Vista: C:\Users\username\AppData\Roaming\Macromedia\Flash Player\Logs
Macintosh: /Users/username/Library/Preferences/Macromedia/Flash Player/Logs 
Linux: /home/username/.macromedia/Flash_Player/Logs
 

Posted by ackie at 11:05 PM | Comments (0)

December 05, 2007

Flash Media Server 3 発表と Flash Player アップデート公開

Flash Media Server 3 が発表されました。また、あわせて Flash Player 9 のアップデートも公開されました。新しい Flash Player のバージョンは 9.0.115.0 です。Flash オーサリング用のデバッグプレーヤも近々公開予定です。

今回の発表により H.264 ビデオと HE-AAC オーディオが正式にサポートされます。以前にもお知らせしたようにフル HD の再生も可能です。その他に、新しく暗号化したストリーミングを実現する RTMPE プロトコルの追加や、再生用の SWF を勝手に利用されないためのチェック機能などコンテンツ保護機能も拡張されています。

今回のバージョンから FMS は2 種類のサーバが提供されるようになります。1 つ目は従来の FMS のバージョンアップにあたる Flash Media Interactive Server 3 (FMIS3) です。2 つ目はビデオストリーミングに特化した新しいパッケージの Flash Media Streaming Server 3 (FMSS3) です。

FMSS は小規模な一方向のコンテンツ配信に使用するためのサーバという位置づけで、双方向のインタラクティブな通信やエッジサーバーを使用した構成等には FMIS が必要になります。その分価格も異なり、US 価格では FMIS が $4,500 からに対して FMSS は $995 (約 10 万円) という発表がされています。

Flash Media Server 3 (FMS3) の出荷は US では来年1月予定とのことです。例によって日本語版は無いため、日本での発売もほぼ同時期になるのではないかと思います。

Posted by ackie at 09:18 AM | Comments (2)

October 02, 2007

Flash Player 10 情報

Astro というコードネームで呼ばれている Flash Player 10 の新機能がいくつか US の MAX で紹介されたようです。公開された内容は以下のとおりです。

1.新しいテキストレイアウトエンジン

Astro では新しく高機能なテキスト描画エンジンが搭載される予定です。これにより、複数カラムのレイアウトやイメージを自動的に包み込むレイアウトそれからテーブル形式のレイアウトなどが可能になるようです。また、日本語固有のレイアウト機能もいくつかサポートされるようです。この機能に関しては Flash Player 10 を待たずに実装が可能とのコメントがありました。

2.3D 効果

Flash のムービークリップを 3D 空間内で扱えるようにする機能が提供される予定です。デモされたのは単純な効果だけのようですので、本格的な "3D" の実現を目的としているわけではなさそうですが、表現の幅が少し広がりそうです。

3.カスタムのフィルター、ブレンド、エフェクト

Flash Player 8 から追加された Player 組み込みのフィルターに加えて、自分で作成したフィルターやエフェクトが使用できるようになる予定です。フィルター等の作成には、こちらも今日発表された Adobe Image Foundation (AIF) ツールキットを使用します。AIF ツールキットはプレビュー版がすでにダウンロードできるようになっていますので、興味のある方は是非どうぞ。C や Open-GL の経験があれば直ぐに使えるもののようです。(Adobe Image Foundation (AIF) Toolkit@Labs

来月の MAX Japan でも Astro のデモがある思いますのでいらっしゃる方はお楽しみに。ちなみに、リリース時期はまだまったく未定だそうです。

Posted by ackie at 12:59 PM | Comments (0)

October 01, 2007

Flash Player 9 アップデート 3

Flash Player アップデート 3 の新しいバージョンが公開されました。(Flash Player 9 Update@Labs

リリースノートによると今回のバージョンは release candidiate と呼ばれています。このまま正式リリースされる可能性の高いものですので、Web の制作や管理をしている方々は今のうちに是非テストをして、何か問題が無いかを確認しておくようお願いします。

最新ベータ版のダウンロードには Labs のダウンロードページ内に各プラットフォーム毎にインストーラが用意されています。(Flash Player 9 update Download

インストール前には既存の Flash Player を一旦アンインストールするようにしてください。アンインストーラは Windows の IE 用が上のリリースノート内のリンクから、その他のブラウザ用はテックノートから入手可能です。

Posted by ackie at 07:41 PM | Comments (0)

August 22, 2007

Flash Player 9 の H.264/HE-AAC サポートについて

Flash Player 9 アップデート版ベータが更新されました。(Flash Player 9 Update@Labs) 今回の目玉は H.264 と HE-AAC (Hi Efficiency AAC) のサポート追加です。あわせて、今秋にアップデートを正式にリリースする予定であることが発表されています。

各プラットフォーム用のインストーラは Labs のダウンロードページから入手できます。(Flash Player 9 Update Downloads@Labs) インストール前に現在インストールされている Flash Player をアンインストールする必要がありますのでご注意ください。アンインストールの手順はこちらのページに記述があります。 (Installation and Uninstallation@Labs - 英語です。すみません。) Uninstallation と書かれた行以下をご参照ください。

H.264 が追加されると iPod で再生できる H.264/HE-AAC ビデオの再生も Flash Plyaer 上で可能になるということですね。DRM が有効なコンテンツは駄目ですが。その他にも MPEG-4 標準に準拠したファイル (MP4, MOV, 3gp, などなど) が Flash Player で再生できることになります。

Flash Player 9 のアップデートがリリースされる頃には、CS3 や Flash Media Server, Flash Media Encoder も新しいコーデックの追加をサポートするためのアップデートが行われることになるようです。また、AIR にも当然次回以降のアップデートのタイミングで H.264 サポートが追加されることになるでしょう。

今回の Flash Player 9 アップデートでは On2, H.264 共に 480p,720p, 1080p の HD がサポートされます。ただ、まだパフォーマンスの最適化はほとんど行われていないとのことで、かなり高性能な PC でないと再生は難しいかもしれません。また、現時点では H.264 でのアルファチャネルはサポートされません。

Posted by ackie at 06:17 PM | Comments (0)

July 27, 2007

SWF と FLV のバージョン 9 ファイルフォーマット公開

SWF と FLV のバージョン 9 ファイルフォーマットがようやく公開されました。こちらの URL からライセンス契約を行うと入手できます。 (Adobe Player Licensing

このライセンスは SWF を生成するソフトウェアの開発を支援するためのもので、SWF を実行するソフトウェアの開発には利用できません。一応念のため。

Posted by ackie at 06:01 PM | Comments (4)

July 18, 2007

Flash Player 9 セキュリティアップデート

すでにいくつかのニュースやサイトで紹介されていますが、先週 Flash Player のアップデーターが公開されました。今回のアップデートはいくつかのセキュリティ上の脆弱性に対応するためのものです。

既存のバージョンは基本的に今回のアップデートで対応された問題の対象になります (Flash Player 9.0.45.0 以前、8.0.34.0 以前、7.0.69.0 以前) ので、最新版の 9.0.47.0 (Linux は 9.0.48.0) にアップデートすることをお勧めします。ダウンロードは Flash Player ダウンロードセンター (Player Download Center) から行えます。

Flash Player 9 がサポートしないプラットフォーム用に Flash Player 7 の対応版 (7.0.70.0) も公開されています。ダウンロードは US のサポートページからどうぞ。(Flash Player upgrade for operating systems that do not support Flash Player 8

その他にスタンドアローンプレーヤやオーサリング環境用のアップデートも公開されています。それぞれバージョンごとに以下のアップデートが用意されています。こちらもダウンロードは US のサポートページからお願いします。(Adobe Flash Player Support Center

Flash Player 9

  • Flash CS3 用アップデート
  • デバッグプレーヤ (FlexBuilder 2 向け)
  • スタンドアローンプレーヤ

Flash Player 8

  • Flash 8 用アップデート
  • Mac 用スタンドアローンプレーヤ

Flash Player 7

  • Mac 用スタンドアローンプレーヤ

Posted by ackie at 05:22 PM | Comments (3)

June 14, 2007

Flash Player の新しいフルスクリーンモード

先日公開された Flash Player アップデート 3 にはハードウェア機能を利用したフルスクリーンモードが追加されています。OS の機能を利用した描画は Flash Player としては初ですのでいろいろな環境で試してみてください。従来のフルスクリーンモードも引き続き使用できます。

ハードウェアスケーリングの使い方

Flash Player 9 アップデート 3 の Stage オブジェクトには fullScreenSourceRect という属性が追加されています。この属性は AS2 と AS3 どちらからでも利用可能です。fullScreenSourceRect により指定された領域はハードウェアのスケーリング機能により描画されるため従来のフルスクリーンモードよりパフォーマンスも画質も格段に改善されます。

ここで簡単なサンプルを見てみましょう。下は、Stage を画面全体に広げるサンプルです。

import flash.geom.*;
function goFullScreen()
{
  Stage["fullScreenSourceRect"] = new Rectangle(0, 0, Stage.width, Stage.height);
  Stage["displayState"] = "fullScreen";
} 
 

Flash CS3 側のクラス定義が更新されるまで Stage.fullScreenSourceRect という記述はできませんのでご注意ください。なお fullScreenSourceRect に指定する領域は Stage の外でも構わないようです。

ビデオをフルスクリーンで表示する場合は、Flash 上でのビデオの大きさをオリジナルの大きさにした状態で行うようにします。Stage 上でもビデオのスケールが変更されているとパフォーマンスに大きな影響があります。

下のサンプルは、video オブジェクトを、明示的に表示する映像の大きさに変更してからフルスクリーンにしています。

import flash.geom.*;
function goFullScreen()
{
  // 現在表示されている状態を保存しておく
  myVideo.savedWidth = myVideo.width;
  myVideo.savedHeight = myVideo.height;
  myVideo.savedSmoothing = myVideo.smoothing;
  myVideo.savedDeblocking = myVideo.deblocking;
 
  // 表示する映像のサイズを video オブジェクトに設定
  myVideo.width = myVideo.videoWidth;
  myVideo.height = myVideo.videoHeight;
  myVideo.smoothing = false;
  myVideo.deblocking = 0;
 
  // 映像の領域をフルサイズに
  Stage["fullScreenSourceRect"] = new Rectangle(myVideo.x, myVideo.y, myVideo.width, myVideo.height);
  Stage["displayState"] = "fullScreen";
}
 

ビデオをフルスクリーン表示する場合は、上のようにビデオ以外が表示されないように領域を設定します。また、smoothing を false にして deblocking をオートにするのもパフォーマンス上大事な点になります。

AS3 での注意点

新しいフルスクリーンモードを AS3 で使うには playerglobal.swc を置き換える必要があります。 新しい playerglobal.swc は下のファイルに含まれています。

full_screen_demo.zip (zip, 49.2 MB)

playerglobal.swc を取り出したら以下の場所にコピーしてください。

Flash CS3: Adobe Flash CS3\en\Configuration\ActionScript 3.0\Classes\

Flex Builder: Flex Builder 2\Flex SDK 2\frameworks\libs

Posted by ackie at 05:05 PM | Comments (6)

June 11, 2007

Flash Player 9 アップデート 3 ベータ公開

さて、今日は忙しい日です。

Flash Player 9 アップデート 3 のベータが公開されました。(Flash Player 9 update@Labs

公開されたのは Windows, Macintosh, Linux 用で、バグフィックスといくつかの新機能追加が行われています。

パフォーマンス関連では、

  • ハードウェアを利用したフルスクリーンモードでのビデオ再生時のパフォーマンスと品質の改善 (Linux 版のみ少し遅れて追加)
  • 複数コア CPU 環境での描画パフォーマンスの向上
  • 大きなビットマップのダウンスケール時の品質とパフォーマンス向上 (SWF 9 のみ)

その他主な項目は、

  • 共通コンポーネントのキャッシュ機能
  • ExternalInterface による JavaScript と ActionScript 間での再帰呼び出しと (Opera と NetScape を除く)、JavaScript からの実行時エラー通知の実現
  • IE での Accept-Language ヘッダーサポート
  • Linux でのフルスクリーンモードサポート

などがあります。

Flash Player 9 for Solaris についてはもうすぐ製品版が adobe.com から公開予定です。

Posted by ackie at 01:01 PM | Comments (0)

May 25, 2007

イベントリスナ (AS3) とガーベジコレクション

不要になったオブジェクトへの参照が残っていると、そのオブジェクトの使用しているメモリを開放することができません。特に複数の参照を持つオブジェクトに対しては、参照の消し忘れによるメモリリークが発生しないよう注意が必要です。

イベントリスナを登録すると、イベントのターゲットになるオブジェクトとイベントリスナを持つオブジェクトの間で参照ができます。AS3 では下のような記述になります。

eventTarget.addEventLisener("type", eventHandler);
 

このコードを実行すると eventTarget と this の間に参照がつくられます。(eventHandler は this オブジェクトのメソッド)

ところが、これは明示的な参照の追加ではありません。そのため、参照の削除が必要な場合でも見落としてしまいそうですよね。

というわけで、今回はイベントリスナ追加時の参照の扱い方についてです。

参照の方向

参照には方向性があります。つまりオブジェクト間の参照は一方向のみ可能ということです。例えば以下のようなコードがあったとします。

var foo = New Foo();
foo.bar = this;
foo = null;
 

一行目で作られている参照は ”このオブジェクト (this)” → ”New Foo() で作られたオブジェクト” という方向の参照です。二行目で作られている参照はこの逆で ”New Foo() で作られたオブジェクト” → ”this” という方向です。三行目では一行目で作成した参照を削除しています。そのため ”this” から ”New Foo() で作られたオブジェクト” へと辿ることはもうできません。

前の記事にあるように、ガーベジコレクタはオブジェクトツリーのルートから参照を辿ります。まず、ルートの子オブジェクトを見つけて、次にその子オブジェクトの子オブジェクトを見つけるという動作を繰り返します。

とすると、上のサンプルが実行された場合、”this” が親オブジェクトであれば、ガーベジコレクタは ”New Foo() で作られたオブジェクト” を見つけることができません。つまり二行目で作成した参照は残っていたとしても、三行目が実行されていればメモリリークの心配は無いことになります。

メモリリークの原因になり得るのは、親から子への参照のみであるということですね。

子オブジェクトへのイベントリスナ追加

では、イベントリスナ追加時にはどの方向の参照ができるのでしょうか。

var foo = New Foo();
addChild(foo);
foo.addEventListener("click", clickHandler);
 

上の例では foo という子オブジェクトを作成して、その子オブジェクトである foo に clickHandler というイベントリスナを登録しています。clickHandler は親オブジェクトのメソッドです。

この場合には、子オブジェクトから親オブジェクトの方向の参照が作られます。 そのためイベントリスナはそのまま放置しておいてもメモリリークを引き起こすことはありません。親オブジェクトは不要になったら foo への明示的な参照を全て削除すれば十分です。

つまり、イベントリスナの追加時には、イベントリスナが追加されるオブジェクト → イベントリスナを持つオブジェクトの方向に参照が作成されているということです。(より正確には、イベントリスナが追加されるオブジェクト → イベントリスナ → イベントリスナを持つオブジェクト)

Flex ではイベントリスナの設定に以下のような記述が良く使われます。

<my:Foo id="foo" click="clickHander(event)" />
 

このケースでも、foo を後で削除する場合、イベントリスナが登録されているかどうかは気にしなくてもよいわけです。Flex 書いた事のある方は分かりますよね?

親オブジェクトへのイベントリスナ追加

次は下のようなケースを考えて見ます。

var foo = New Foo();
addChild(foo);
addEventListener("click", foo.clickHandler);
 

今度は親オブジェクトが子オブジェクトのメソッドを登録しています。ということは、親から子への参照が作成されているということです。

このような場合は、子オブジェクトへの参照を削除する際にイベントリスナも削除しないとメモリリークの原因になります。

下のように子オブジェクトから親オブジェクトにイベントリスナを設定する場合も同様です。

parent.addEventListener("click", clickHandler);

イベントリスナの削除には removeEventListener() を使います。

parent.removeEventListener("click", clickHandler);

また Flex に話を移しますが、特に Flex では親子関係が分かり難い場合があります。例えばポップアップ表示されるウインドウオブジェクトがあったとして、その中でクリックイベントのリスナを SystemManager に登録した場合、

SystemManager.addEventListener("click", clickHandler);
 

SystemManager からポップアップウインドウへの参照が作られます。

ところで SystemManager はポップアップウインドウを管理する親オブジェクトでもあります。そのため、SystemManager からポップアップウインドウへの参照が 1. popupChildren の配列からと、2. イベントリスナ経由、の 2 つ存在することになります。従って、この場合は、ポップアップウインドウを削除する時にイベントリスナも削除しないとメモリリークが発生します。

弱い参照の利用

弱い参照とは、たとえ存在していても、ガーベジコレクションの際に参照としてみなされない参照です。

これは大変便利で、イベントリスナにより生成される参照が全て弱い参照であれば、参照の方向とか気にせず登録したリスナを放置しておいて良いことになるからです。

都合の良いことに、イベントリスナの登録時に弱い参照を使うかどうかを指定することができます。addEventListener() の5 つ目の引数を true にすれば弱い参照が使われます。

addEventListener(”type”, listener, false, 0, true)

3 つ目と 4 つ目の引数は false と 0 を指定しておけば大抵問題ありませんので、上の形を覚えておけば大丈夫です (たぶん)。今後イベントリスナを登録する際はこれを使うように決めてしまうというのも結構お勧めかもしれません。

Posted by ackie at 06:09 PM | Comments (1)

May 23, 2007

Flash Player 9 のガーベジコレクション

Flash/Flex のアプリケーションを開発していると (たまには) メモリリークとか気になることもあるかと思います。今回は Flash Player 9 のガーベジコレクションについてです。詳細な実装レベルだと、Flash Player のアップデート時に、ガーベジコレクション周りでも多少の変更が行われたりしていますが、いまのところ基本的なモデルは変わっていません。今回はこの ”基本的なモデル” を紹介します。

Flash Player 8 以前は少し違ったモデルになっています。以下の記述内では Flash Player とあったら Flash Player 9 のことだと思ってください。

Flash Player のメモリ確保

Flash Player のメモリ確保時の動作は特にユニークなものではありません。が、話の基本になるのでとりあえず以下概要です。

メモリの確保は負荷の高い部類に属する処理です。そのため、Flash Player がメモリを確保するときは、必要になるたびに毎回確保するのではなく、一度にある程度大きなメモリ領域を確保しておいて、それを小さなブロックに分けて使用します。メモリの割り当てが必要になるごとにブロックを一つ一つ使用していきますが、これらのブロックは既にメモリ上に確保されています。すなわち、メモリの割り当てを行うけれども、実際のメモリの確保は必要は無い状態になるわけです。全てのブロックを使い切ると、次の大きなメモリ領域を確保します。

ちょっと、”たんす” と ”引き出し” の関係に似ています。買うのは ”たんす” 単位、使うのは ”引き出し” 単位、ということで。

なお、ビットマップデータのように大きなデータは個別にメモリの確保が行われます。

メモリ参照の削除

さて、今度は一旦確保したメモリ領域を開放するときの動きです。

例として下のコードを考えることにしましょう。

var foo = new Foo();
foo = null;
 

まず、一行目の右辺でオブジェクトを生成しています。その際に、新規オブジェクトに対してメモリ領域が割り当てられます。

以降の話を単純化するため、ここでは

「一つのオブジェクトに割り当てられる領域 = ブロック (引き出し) 一つ」 と仮定

することにします。そうすると一行目では新規オブジェクトの格納されている "引き出し" への参照を foo という変数に渡していることになります。

二行目で foo の持つ参照を無効にしています。このとき削除されているのは "引き出し" へ の参照であって "引き出し" の中身ではないことは重要です。つまり、このままだと "引き出し" は空になっていないはずです。変数に null を代入するだけではメモリを開放するのに十分ではないわけです。

ところが、プログラム側からはこれ以上メモリの開放に関与することはできません。後は、どこかのタイミングで起動されるはずのガーベジコレクタに任せることになります。

ガーベジコレクションの動き

Flash Player 上ではオブジェクトの格納されている ”引き出し” はツリーとして管理されています。ツリーのルートは Stage です。(正確にはクラス定義とローカル変数がルートのツリーもあります)

ガーベジコレクタは、Stage から順番にツリー上のノード (ここでは ”引き出し” ) を辿ります。途中で見つかったノードには印を付けます。

上のサンプルコードに当てはめてみると、一行目の実行が完了した時点では foo から新規オブジェクトへの参照が存在します。ですので、このタイミングでガーベジコレクタが実行されると (Stage から foo を含むオブジェクトへたどり着くことができれば) foo を含むオブジェクトに印を付けた後に新規オブジェクトにも印を付けます。

ところが、二行目 (foo = null) の実行後には新規オブジェクトへの参照は削除されています。そのため、この時点でガーベジコレクションが実行されると foo を含むオブジェクトに印を付けた後、新規オブジェクトへとたどることができません。その結果、新規オブジェクトには印を付けません。

ガーベジコレクタがツリーを最後まで全て辿り終えて、それでも印の付いていない ”引き出し” は、ようやく再利用や開放の対象になります。この後実際にメモリを開放するのもガーベジコレクタの仕事です。

さて、ガーベジコレクタが動いても実際のメモリ開放までは行われないケースがあります。以下、3 点ほど理由を説明します。

重要な点ひとつ目

まず、メモリの割り当てや解除はブロック単位で行われますが、物理的なメモリの確保や開放は、ブロックの集合であるもっと大きな塊が単位です。前にも書いたように、使うのは ”引き出し” 単位、売ったり買ったりは ”たんす” 単位、ということです。

このため、たとえ一つでも "引き出し" が使用中だと、その "たんす" は返却できません。実際に、ガーベジコレクタが実行された結果、いくつかの "引き出し" を空にしていたとしても、 "たんす" が返却できなければ、確保しているメモリの量は減らないわけです。

このような場合にはガーベジコレクタが使用中の "引き出し" を他の "たんす" に移すことで、全ての "引き出し" を空にして (いわゆるコンパクション) "たんす" を開放できるようにします。が、これは必ず実行されるわけではありません。その理由は 2 つめの理由にあります。

重要な点ふたつ目

Flash Player のガーベジコレクタは控えめで、メモリの開放を積極的に行うようにはなっていません。

ガーベジコレクションは非常多くの作業を行うため、長時間に渡ってリソースを占有する可能性があります。その結果、例えばちょっとの間なり画面が固まった状態になってしまうかもしれません。これはユーザインターフェースとしては望ましくないことです。

そこで、ガーベジコレクタは全ての処理が完了していなくても、描画処理やインタラクションを邪魔しないように途中で実行を中断することがあります。コンパクションのように重い処理は、より完了しない可能性が高いと思われます。

これは、また、描画処理やスクリプトの実行でクライアントの負荷が高い状況が続いていると、メモリの開放が起きにくいということでもありますね。

重要な点みっつ目

繰り返しになりますが、ガーベジコレクションは重い処理です。そのため、起動される条件が限定されています。それは、

  1. 新しくメモリの割り当てが要求された
  2. 空いているブロックの残りが少ない

の2つが重なって、新しくメモリを確保する必要が出そうな場合です。

ということは、スクリプトが何も実行されていない状況では、ガーベジコレクタも起動されません。アイドル状態のアプリケーションを一生懸命観察していてもメモリは減らない訳です。

Posted by ackie at 07:36 PM | Comments (2)

May 01, 2007

Flash Player 9 Solaris 用プレリリース公開

Solaris プラットフォーム用の Flash Player 9 プレリリース版のアップデートが公開されました。Adobe Labs からダウンロードできます。 (Flash Player 9 Update

Posted by ackie at 12:29 PM | Comments (4)

April 13, 2007

Flash Player 9 アップデート

Flash Player 9 がアップデートされました。最新版は 9.0.45.0 で、Win 版と Mac 版が用意されています。

今回のリリースは近々リリース予定の Flash CS3 Professional への対応が主な目的です。修正された項目は以下のとおりです。

  • Flash CS3 Professional の新しい AS3 コンポーネントが正しく動作しない
  • gotoAndStop 等のコマンドでのフレーム移動により生成された AS3 オブジェクトの第一フレームのスクリプトが正しく実行されないケースがある
  • AS3 用のランタイムシェアードライブラリ (RSL) が実行時にセキュリティーエラーを起こす
  • flash.text.TextField.getCharBoundaries の返す領域が左に2ピクセルずれる

より詳細な問題の解説と対応が以下の Technote にあります。英文で恐縮ですがとりあえず。

Posted by ackie at 12:01 PM | Comments (0)

March 19, 2007

Solaris 版 Flash Player 9 ベータ

Adobe Labs に Solaris 用 Flash Player 9 のベータ版が公開されました。(Flash Player 9 beta for Solaris@Labs) Spark と x86 版がダウンロードできます。なおインストーラは英語版のみです。

Posted by ackie at 10:35 AM | Comments (1)

January 17, 2007

Linux 用 Flash Player 9 リリース

Linux (x86) 用 Flash Player 9 (9.0.31.0) が adobe.com のダウンロードセンターに公開されました(Adobe Flash Player Download Center). スタンドアローン版およびデバックプレーヤはサポートのページからダウンロード可能です。( support downloads

Windows, Mac 版と比べると Express Install や自動更新の通知機能はまだ実装されていません。その他にも WMODE のサポートや Opera サポート、それからフルスクリーンでのビデオ再生等いくつかの機能が次回以降のアップデートで対応予定になっています。詳細はとりあえず英語ですがリリースノートをご覧ください。(Flash Player 9 Release Notes

Posted by ackie at 09:20 PM | Comments (0)

January 16, 2007

Flash Player 9 アップデートのログファイル

先日アップデートされた Flash Player 9 からログファイルの場所が変更されていましたのでお伝えします。

最初に公開された Flash Player 9 (9.0.16.0) では mm.cfg ファイルでログファイル名やディレクトリを指定することができましたが、アップデート版 (9.0.28) からはログファイル名も場所も変更できないようになっています。

それぞれの OS でのログの格納場所もしくはファイル名は以下のとおりです。user_name の箇所は実際のユーザ名で置き換えてください。

Windows: C:\Documents and Settings\user_name\Application Data\Macromedia\Flash Player\Logs

Windows Vista: C:\Users\user_name\AppData\Roaming\Macromedia\Flash Player\Logs

Macintosh: Users/user_name/Library/Preferences/Macromedia/Flash Player/Logs/

Linux: home/user_name/.macromedia/Flash_Player/Logs/flashlog.txt

Posted by ackie at 05:49 PM | Comments (0)

December 15, 2006

Intel Mac 用スタンドアローンプレーヤ

Intel Mac 用 Universal Binary のスタンドーアローン版 Flash Player 9 がリリースされました。

日本のサイトはアップデートされていないようですので直接ダウンロードURLへのリンクを貼っておきます。

Posted by ackie at 07:53 AM | Comments (6)

November 21, 2006

Linux 版 Flash Player 9 アップデートベータの更新

どの程度興味のある方々がいらっしゃるのかちょっと興味のあるところなのですが、Linux 版の Flash Player 9 のみまだアップデート版が正式にリリースされていない中で、Adobe Lab に新しい Linux 版 Flash Player ベータが公開されました。 新しいバージョンは 9.0.21.78 になります。

リリースノートはこちらです。(Flash Player 9 Update beta release notes@Labs) ダウンロードはこちらから。(Downloads: Flash Player 9 Update@Labs

Posted by ackie at 05:25 PM | Comments (2)

November 15, 2006

Flash Player 9.0.28.0 リリース

Flash Player 9 のアップデートが公開されました。(9.0.28.0) 今回公開されたのは Windows 版と Mac 版です。以下のページからダウンロードが可能です。(Flash Player Download Center) Linux 版はまだ Adobe Labs で、次の更新もベータ版という位置づけになりそうです。

今回修正された主なバグのリストはリリースノート(Flash Player 9 リリースノート)に記載されていますのでご覧になってください。また、Security Bulletin APSB06-018 にある HTTP ヘッダに関する脆弱性についても修正されています。積極的に新しいバージョンにアップデートすることをお勧めします。

Adobe Labs からベータ版の Flash Player をダウンロードして使用していた場合は、アップデート前に一旦現在インストールされている Flash Player をアンインストールしたほうがよいようです。アンインストーラはこちらから入手できます。(Flash Player Downloads) 日本のダウンロードページのアンインストーラはまだ更新されていないようですので、とりあえず上記のリンクをお使いください。

Posted by ackie at 01:45 PM | Comments (4)

October 19, 2006

Flash Player 9 アップデートのアップデート

先日 Adobe Labs に公開された Flash Player 9 update が更新されました。いくつかのバグが修正されています。新しいバージョンは 9.0.21.75 です。ダウンロードはこちらから。(downloads - flash player 9@labs

あわせて待望の Linux 用 Flash Player 9 ベータが公開されました。バージョンは 9.0.21.55 です。Linux 版はまだフルスクリーンモードがつかえないとかスタンドアローンプレーヤでは SSL が使えないなど多少の違いはありますが、基本的に Windows や Mac 版のアップデート版と同じものです。最終的にアップデート版が正式リリースされるタイミングでは上記の機能も組み込まれる予定です。また 64 bit 版についても FAQ で言及されています。(Flash Player wiki@labs) まだいつ頃出てくるかははっきりしていないようです。

これでようやく Linux 上で無償の Flex 2 SDK を使って開発することが可能になります。FDS も Linux 上でサポートされているので、全ての機能を Linux 環境で使えます。Flex 2 と Linux については Adobe Labs にも専用の wiki がありますのでご参考まで。(Flex 2 for Linux wiki@labs

サポートされる環境は次のとおりです。

  • Red Hat Enterprise Linux 3, Update 8
  • Red Hat Enterprise Linux 4, Update 4 (AS/ES/WS)
  • SUSE Linux 9.x or 10.1
  • Firefox 1.5.0.7
  • Mozilla Seamonkey 1.0.5

主な既知のバグはリリースノートをご覧ください。(known issues@labs

Posted by ackie at 01:52 PM | Comments (0)

October 12, 2006

Flash Player 9 での rtmps の変更

Flash Player 9 の話が続いたので、ついでに小ネタです。

Flash Player 9 からネットワーク機能を使用する際に暗号化ができるようになっています。以前は、暗号化機能の使用はブラウザに完全に依存していたため、rtmp は Flash Player から直接サーバと接続するのに対して、rtmps を指定すると https にカプセル化して(つまりブラウザ経由で)データを送受信していました。

Flash Player 9 では rtmp の暗号化通信を http トンネリングを使わずに行うことができます。設定については、livedocs に記述がありますのでご参照ください。(メッセージチャンネルの設定@livedocs) ページ中ほどにあるテーブルの ”セキュアな RTMP” の箇所です。

それから、以前の記事( Flash Player セキュリティーアップデート) で紹介した Flash Player 8 以前のバージョンのセキュリティアップデートの速報が日本のサイトにアップされました。(Adobe Flash Player8.0.24.0および下位バージョンの複数脆弱性) こちらも合わせてお知らせしておきます。

Posted by ackie at 06:05 PM | Comments (3)

October 11, 2006

Flash Playe 9 アップデート追加情報

フルスクリーンモードの記事にセキュリティに関する情報が追加されましたのでご紹介です。

ユーザ側で mms.cfg というファイルを使って、明示的にフルスクリーンモードの使用を禁止することができます。前回の記事に書いたように、そもそもフルスクリーンモードにはユーザが明示的にマウス等で選択しない限り移行しないのですが、この設定をすれば間違ってフルスクリーンにしちゃうということも防げます。やっぱりフルスクリーンで見たいと思ったときは面倒になりますが。

具体的には mms.cfg ファイルに FullScreenDisable=1 という行を追加します。

mms.cfg は UTF-8 のテキストファイルで、”名前=値”のペアが一行ずつ記述されます。Flash Player 9 用の mms.cfg ファイルの場所は以下のとおりです。

  • Windows 2000 C:\WINNT\System32\Macromed\Flash
  • Windows XP C:\WINDOWS\System32\Macromed\Flash
  • Windows 98, or ME C:\Windows\System\Macromed\Flash
  • Macintosh \Application Support\Macromedia

フルスクリーンモードの例がリンクされているページも追加されました。(Full-Screen Mode:Demos@lab

Posted by ackie at 04:18 PM | Comments (0)

October 05, 2006

Flash Player 9 アップデート プレビュー

先日 Flash Player 9 のアップデート版のプレリリース版が Adobe Labs に公開されました。いくつかのバグフィックスや新機能の追加のほかVista のサポートも追加されていますので、正式公開前に試してみたい方はこちらからダウンロードして見てください。インストーラとアンインストーラが入手できます。(Flash Player 9 Update@Adobe Labs) Linux 版はもうちょっとかかるようです。

なお、IE 用の ActiveX コントローラのインストールには一旦現バージョンのアンインストールが必要になるケースもあるようです。こちらのページ(Adobe Flash Player)で 9.0.18.60 と言われなかった場合には、お手数ですが明示的に Flash Player をアンインストールしてからアップデート版をインストールしてみてください。

さて、今回の変更の目玉はプラグインからのフルスクリーンモードの利用です。ブラウザ内に表示される HTML に埋め込まれた swf がフルスクリーンで表示できるようになります。ただし、今までのコンテンツがいきなりフルスクリーン表示できるようになるわけではありません。主にセキュリティ上の理由からいくつかの制限もかけられています。

詳しい説明はこちらのページ(Flash Player 9 Update:Full-Screen Mode@Adobe Labs)にありますが、以下かいつまんで説明します。

まず、セキュリティ関連の項目をいくつか。

  • <object> および <embed> タグ内で allowFullScreen=true を明示的に指定する必要あり
  • フルスクリーンモードに移行するときノーマルモードへの戻り方を記したダイアログボックスが表示される
  • フルスクリーンモードへの移行はマウスクリックかキーを押した場合のみ可能
  • フルスクリーンモードではキー入力は無視される (例外はノーマルモードへ戻るショートカットキーのみ)

また、ActionScript からスクリーンモードをコントロールするために新しい API が追加されました。

ActionScript 2 の場合:

// スクリーンモードの切り替え
Stage["displayState"] = "fullScreen";  
Stage["displayState"] = "normal";
// スクリーンモード切替時に呼ばれるイベントリスナー
EventListener.onFullScreen = function( bFull:Boolean ){}
Stage.addListener( EventListener );

ActionScript 3 の場合:

// スクリーンモードの切り替え
stage.displayState = StageDisplayState.FULL_SCREEN;
stage.displayState = StageDisplayState.NORMAL;
// スクリーンモード切替時に呼ばれるイベントリスナー
fullScreenHandler = function( event:FullScreenEvent ) {};
stage.addEventListener( FullScreenEvent.FULL_SCREEN, fullScreenHandler );

AS3 からこれらの新しい API を使用するには開発環境も更新する必要があります。必要はファイルはこちらからダウンロードできます。(fullscreen_article_assets.zip - 194KB)

preview release of Flash Professional 9 を使っている場合は次のファイルを置き換えます。

Flash 9 Public Alpha/en/Configuration/ActionScript 3.0/playerglobal.abc

Flex Builder 2 を使用している場合は次のファイルです。

Flex Builder 2/Flex SDK 2/frameworks/libs/playerglobal.swc

Flash で AS2 を使っていれば上記の記述でそのまま使用できます。

Posted by ackie at 02:55 PM | Comments (5)

September 14, 2006

Flash Player セキュリティーアップデート

Flash Player 8 以前のバージョンに対するセキュリティ対応版が公開されました。最新の Flash Player 9 ではこの問題は既に対処済ですので、今回の対応は Flash Player 9 にアップデートできない環境のみ対象となります。

対象となる Player バージョンは 7 と 8 で、バージョンは次の通りです。

Flash Player: 8.0.33.0, 7.0.68.0, (7.0.66.0 - Solaris のみ)

またオーサリング環境にも Flash Professional 8, Flash Basic 8 (Win/Mac), Flash MX 2004 (Win/Mac), Flex 1.5 (Win) それぞれにアップデータが出ています。

サポートセンターのアーカイブはまだ更新されていないため、当面プラグインの入手は以下のサイトを経由することになります。

オーサリングのアップデートはこちらからどうぞ

Posted by ackie at 07:53 PM | Comments (0)

August 11, 2006

Intel Mac 向け Flash Player 公開

Intel Mac 用 Flash Player が公開されました。バージョンは少し上がって 9.0.20.0 です。ダウンロードはこちらのURLからできます。(Flash Player ダウンロードセンター Mac OS X) 他のプラットフォームでは引き続き従来のバージョンをお使いください。

日本のサイトのリリースノートはまだアップデートされていないようですが、Audio MIDI のサンプルレートが 48Khz 以上のときにサウンドの入力がされない件と、ロゼッタモードではピクセルベースのグリッドフィッティングが効かない件、および日本語を含むダブルバイトモードでは Mozilla プラグインファインダーサービスが Flash Player 9.0.20.0 をインストールしない件が追加されています。(Flash player release notes@US site

ご参考までに、こちらも英語ですが Flash Player 9 で既知の主要な問題についてはこちらのテックノートにまとめられています。(Flash Player 9 Emerging Issues

Posted by ackie at 06:29 PM | Comments (0)

June 28, 2006

Flash Player 9 リリース

Flash Player 9 がリリースされました。こちらの URL からダウンロードできます。Flash Player ダウンロードセンター

さっそくどうぞお試し下さい。

Posted by ackie at 08:31 AM | Comments (0)

April 22, 2006

Flash Player 9

特に何が変わったというわけではありませんが、Flash Player 8.5 と呼ばれていた次期 Player の名前が Flash Player 9 に変わりました。もうすぐ公開予定のベータ 3 からこの名前になるとのことです。

Adobe Labs の wiki にある FAQ によると、非常に大きな変更のあるバージョンアップであることをはっきりと伝えたいというのが主な理由のようです(Labs の FAQ はこちら)。

Posted by ackie at 10:45 PM | Comments (0)