亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? walkthrough.txt

?? 彩信瀏覽器
?? TXT
字號:
.. _walkthrough-section:How does the AmbulantPlayer play a SMIL document?=================================================Last updated for Ambulant version 1.8.Introduction------------This section attempts to explain the basic structure of the Ambulant Player byloosely explaining what happens when you run it and play a document.There is an informal `overall structure diagram`_ that tries to put the wholedesign in one pretty picture and may be worthwhile to keep handy while readingthis document.The main program is platform dependent and GUI-toolkit dependent. The detailsof this main program are skipped here (and they can actually vary quite a bitfor the platforms we support), but at some point after the program has startedthe GUI is put on the screen, with the usual set of menus for Open, Play, etc.Opening a document------------------When the user selects Open (or Open URL, or double-clicks or drags a document)we need to get the data, parse the document into a DOM tree and create aplayer to play that DOM tree. In addition, we need to tell the player howit can obtain media data, create windows, and more.Most player implementations (the Windows player is an exception) have aclass with a name like ``mainloop`` to handle this. Such a mainloop is createdper SMIL document. Actually, Ambulant provides a class ``gui_player`` whichcan be used as a skeleton for such a mainloop class, handling most of the bookkeepingsketched below.The mainloop object should first create the various factoriesand populate them:- A ``window_factory`` is usually implemented by the main program itself. The  player will call this when it needs a window. Usually the first request to  create a window will actually return the document window (after resizing to  the appropriate size).- A ``global_playable_factory`` is created. This is the object the player will  use to create renderers for the various media types. The global factory  is filled with the various renderers this ambulant player supports. In effect,  this is the step where you get to decide how various media are rendered.- A ``datasource_factory`` is created and filled with the factory functions that  will create datasources for audio, video or other, raw, data such as text.  The factory functions that are added to the datasource_factory partially  determine how data is retrieved over the net, which protocols and formats  are supported and such. Partially, because some media items (audio and video,  notably) may be rendered by simply passing the URL to some underlying media  infrastructure such as DirectX or QuickTime.  - A ``parser_factory`` is created and populated with the default XML parser.- A ``node_factory`` used to create the DOM tree nodes.Next ``init_plugins`` is called, and if thearchitecture supports dynamically loadable plugins we get the ``plugin_engine``singleton object and ask it to load the plugins. This will search the plugindirectories for dynamic objects with the correct naming convention, load them,and call their ``initialize`` routine. The ``factories`` object (another interfaceusually implemented by ``gui_player``) and ``gui_player`` object are passed tothe ``initialize`` routine, so the plugin itself can register any factoriesit wants. Additionally, a plugin could modify the ``gui_player`` to allowit to get controllater, during playback of the document.The next step is to create the DOM tree. One way to do this is to use``read_data_from_url`` to read the data from the document, and then pass thisdata to ``document::create_from_string``. This will return a ``document`` object.This object contains the DOM tree itself (implemented by the ``node`` object) andsome context information (XML namespace information, original URL for resolvingrelative URLs used in the document, a mapping from XML IDs to node objects). There is aconvenience function ``create_document`` that does all this for you.The final step is to create a ``player`` object. This is done through``create_smil2_player``, passing the ``document``, the ``factories`` and onefinal object, ``embedder``. This object is again implemented by the main program,and implements a small number of auxiliary functions, such as opening anexternal webbrowser or opening a new SMIL document.Creating the player-------------------When the ``smil_player`` object is created it gets the ``document``, ``factories``and ``embedder`` arguments. It now needs to create its internal data structuresto facilitate playback later on:- A ``timer`` and ``event_processor`` are created. The timer is the master clock  for the presentation, and the event processor is a runqueue object that is  used for low-level scheduling. Whenever the high-level scheduler wants some  code to be executed it will add an ``event`` to the ``event_processor``, possibly  with a timeout and a priority. The event processor runs in a separate thread,  waits for events in its runqueue to become elegible and then runs them.  This mechanism is the underlying engine that makes the whole player work,  anything that needs to wait doesn't do so inline but uses the event processor  to get a callback at a later stage: the scheduler, renderers needing input data,  etc.  - A ``layout_manager`` is created, which will be used to find where media  items should be displayed. The ``smil_layout_manager`` reads the ``<layout>`` section  of the DOM tree and builds a parallel layout tree (which also contains information  on some of the body media nodes, the ones that have layout information themselves)  of ``region_node`` objects. Then this tree of ``region_node`` objects is  converted into a tree of ``surface_template`` objects. To create toplevel windows  the ``new_topsurface`` method of the window factory is used, and subregions are  created using the ``new_subsurface`` method of their parent ``surface_template``.  The layout manager also contains mappings to be able to get from a ``node`` to the  corresponding ``region_node`` to the ``surface_template``, and this will be used  during playback to play media items in the correct location.  - A ``timegraph`` is created. This is the internal representation of the ``<body>``  part of the DOM tree that will be used to play back the document. In addition   a ``scheduler`` is created, which will interpret the data in the ``timegraph``.Starting playback-----------------When the user selects Play we call the ``start`` method of the ``player`` object.This will invoke ``start`` on the scheduler. This will start playing the rootnode of the tree. The scheduler will now do all the SMIL 2 magic, whereby eventssuch as the root node being played causes other nodes to become playable, etc.At some point a media item needs to be rendered. The scheduler calls the ``new_playable``method from the ``global_playable_factory``. This will pass the DOM ``node`` to thevarious factories until one signals it can create a ``playable`` for the object.In addition, if the playable has a renderer (which is true for most media objects,but not for things like SMIL animations) we also obtain the ``surface`` on whichthe media item should be renderered, through the ``layout_manager``. We then tellthe renderer which surface to use.Soon afterwards the ``start`` method of the playable is called to start playback.An average renderer will need to obtain data from some URL. It will do this by creatinga ``datasource`` for the document through the ``datasource_factory`` object. Every timethe renderer wants more data it calls the ``start`` method of the datasource passinga callback routine. Whever data is available the datasource will schedule a callto the callback routine, through the event processor. When the renderer has enoughinformation to start drawing it will not actually draw immedeately, but it willsend a ``need_redraw`` call to its surface. This will percolate up the surfacehierarchy, to the GUI code, and eventually come back down as a ``redraw`` call allthe way to the renderer (assuming it is not obscured by other media items, etc).At this point the bits finally get drawn on the screen.Whenever anything "interesting" happens in the renderer (the media item stopped playing,the user clicked the mouse, etc) it invokes a corresponding method on its``playable_notification``. This interface is implemented by the scheduler, and thesenotifications are how the scheduler gets informed that it can start scheduling new things,etc.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美国产日本韩| 国产一区二区三区日韩| 精品在线你懂的| 91日韩精品一区| 国产日韩欧美精品在线| 日本中文字幕一区二区有限公司| 国产二区国产一区在线观看| 欧美男人的天堂一二区| 欧美激情一区二区三区全黄| 日韩电影免费在线看| 99re这里只有精品6| 久久久久久久久免费| 日本亚洲天堂网| 欧美理论片在线| 亚洲成av人片在线| 91久久精品网| 亚洲欧洲日韩av| 不卡av免费在线观看| 国产日韩一级二级三级| 久久国产精品99久久人人澡| 9191成人精品久久| 首页综合国产亚洲丝袜| 欧美人与性动xxxx| 亚洲一区二区三区四区的| 91福利资源站| 一区二区三区四区亚洲| 91久久精品国产91性色tv| 中文字幕五月欧美| 91浏览器在线视频| 《视频一区视频二区| a级高清视频欧美日韩| 日本一区二区久久| 99九九99九九九视频精品| 最新国产精品久久精品| 91丨九色porny丨蝌蚪| 一区二区三区资源| 欧美区在线观看| 精品一区免费av| 久久色在线视频| 成人中文字幕电影| 国产精品白丝在线| 一本色道a无线码一区v| 亚洲精品高清视频在线观看| 欧美视频日韩视频在线观看| 石原莉奈在线亚洲三区| 欧美成人aa大片| 久久精品国产第一区二区三区| 精品国产乱码91久久久久久网站| 国产黄人亚洲片| 国产精品久久久久久久久晋中| 91麻豆精品在线观看| 亚洲gay无套男同| 精品处破学生在线二十三| 成人中文字幕合集| 亚洲国产cao| 2021国产精品久久精品| av动漫一区二区| 日本免费在线视频不卡一不卡二| 欧美变态tickling挠脚心| 不卡av在线网| 日韩中文欧美在线| 国产精品五月天| 91麻豆精品国产91久久久久久| 国产一区91精品张津瑜| 亚洲精品久久久蜜桃| 日韩欧美高清一区| 91女厕偷拍女厕偷拍高清| 免费在线成人网| 国产精品久久777777| 欧美美女直播网站| 国产传媒一区在线| 视频一区视频二区中文字幕| 久久尤物电影视频在线观看| 一本大道av伊人久久综合| 日本成人中文字幕在线视频| 中文字幕中文字幕中文字幕亚洲无线| 欧美午夜不卡在线观看免费| 丰满亚洲少妇av| 美女脱光内衣内裤视频久久网站| 日韩一区日韩二区| 精品对白一区国产伦| 欧美亚洲综合网| 成人精品免费视频| 久久国产尿小便嘘嘘尿| 亚洲一区av在线| 中文字幕亚洲欧美在线不卡| 欧美成人一区二区三区| 欧美日韩国产另类一区| 91一区二区在线| 国产精品18久久久久久久久久久久| 亚洲制服丝袜av| 国产精品久久久久久久久动漫 | 色综合久久66| 国产一区二区调教| 麻豆精品一区二区综合av| 亚洲欧美一区二区三区国产精品 | 国产精品亲子乱子伦xxxx裸| 91精品国产欧美一区二区| 91麻豆精品一区二区三区| 懂色av一区二区夜夜嗨| 久久国产精品露脸对白| 日韩成人伦理电影在线观看| 樱桃国产成人精品视频| 日韩理论电影院| 国产精品麻豆99久久久久久| 久久久夜色精品亚洲| 欧美精品一区二区三区蜜桃| 日韩精品一区二区三区在线| 欧美电影在线免费观看| 欧美在线短视频| 91久久精品网| 欧美婷婷六月丁香综合色| 日本精品视频一区二区三区| 色偷偷久久人人79超碰人人澡| 成人v精品蜜桃久久一区| 高清视频一区二区| 不卡av电影在线播放| 99精品国产99久久久久久白柏| 成人av资源在线观看| 99国产精品99久久久久久| 一本大道综合伊人精品热热| 色综合久久88色综合天天免费| 色哟哟在线观看一区二区三区| 一本大道综合伊人精品热热| 欧美性淫爽ww久久久久无| 欧美在线你懂的| 欧美一卡二卡三卡| 欧美电影免费观看完整版| 久久久天堂av| 亚洲欧美中日韩| 亚洲精品成人少妇| 日本亚洲免费观看| 国产成人精品免费在线| 91在线观看下载| 欧美性一级生活| 精品蜜桃在线看| 中文字幕不卡在线播放| 亚洲欧美日韩在线| 天天射综合影视| 国产精品 欧美精品| 99国内精品久久| 91精品国产综合久久久久久久久久| 精品国产伦理网| 亚洲免费观看视频| 免费看欧美美女黄的网站| 国产电影精品久久禁18| 在线观看成人小视频| 欧美zozo另类异族| 亚洲欧美二区三区| 国产综合久久久久久鬼色| 99国产精品国产精品毛片| 日韩欧美国产一区在线观看| 日本一区免费视频| 视频一区中文字幕| 99综合电影在线视频| 日韩午夜激情免费电影| 国产精品成人网| 黄网站免费久久| 欧美亚洲另类激情小说| 久久久精品蜜桃| 午夜精品久久久久久久久| 成人av动漫网站| 日韩欧美国产综合在线一区二区三区| 中文字幕一区二区5566日韩| 奇米影视在线99精品| 在线精品视频免费观看| 国产欧美日韩三级| 蜜桃av一区二区在线观看| 91麻豆自制传媒国产之光| 国产午夜精品福利| 日本不卡不码高清免费观看| 91一区二区在线| 欧美国产日韩在线观看| 天堂成人免费av电影一区| 色美美综合视频| 欧美国产丝袜视频| 国产一区二区调教| 欧美电影免费观看完整版| 日韩av电影免费观看高清完整版| 91亚洲精品久久久蜜桃网站| 久久精品视频一区二区三区| 日本va欧美va精品发布| 在线亚洲一区观看| 一区二区在线免费| 色综合久久中文综合久久97| 国产精品久久久久久久岛一牛影视 | 国产人久久人人人人爽| 免费欧美在线视频| 欧美一区二区三区免费大片| 亚洲一区二区在线免费观看视频 | 中文字幕中文在线不卡住| 国产成人av电影在线| 久久午夜电影网| 国产一级精品在线| 久久久777精品电影网影网 | 中文字幕久久午夜不卡| 国产一区二区三区香蕉| 2020国产精品久久精品美国| 韩国av一区二区| 日本一区二区视频在线观看|