当前位置: 首页 > news >正文

北京网站优化网做网站到内容填充需要多久

北京网站优化网,做网站到内容填充需要多久,手机可以做软件开发吗,内江网站开发From: http://blog.csdn.net/lvmaker/article/details/8785936 1#xff0e; 概述 VLC属于Video LAN开源项目组织中的一款全开源的流媒体服务器和多媒体播放器。作为流媒体服务器#xff0c;VLC跨平台#xff0c;支持多操作系统和计算机体系结构#xff1b;作为多媒体播放…From: http://blog.csdn.net/lvmaker/article/details/8785936 1 概述 VLC属于Video LAN开源项目组织中的一款全开源的流媒体服务器和多媒体播放器。作为流媒体服务器VLC跨平台支持多操作系统和计算机体系结构作为多媒体播放器VLC可以播放多种格式的媒体文件。主要包括有WMV、ASF、MPG、MP、AVI、H.264等多种常见媒体格式。 VLC采用全模块化结构在系统内部通过动态的载入所需的模块放入一个module_bank的结构体中统一管理连VLC的Main模块也是通过插件的方式动态载入的通过module_InitBank函数在初始化建立module_bank时。对于不支持动态载入插件的系统环境中VLC也可以采用builtin的方式在VLC启动的时候静态载入所需要的插件并放入module_bank统一管理。 VLC的模块分成很多类别主要有access、access_filter、access_output、audio_filter、audio_mixer、audio_output、codec、control、demux、gui、misc、mux、packetizer、stream_output、video_filter、video_output、interface、input、playlist等其中黑体为核心模块。VLC无论是作为流媒体服务器还是多媒体播放器它的实质思路就是一个“播放器”之所以这么形象描述是因为The core gives a framework to do the media processing, from input (files, network streams) to output (audio or video, on ascreen or a network), going through various muxers, demuxers, decoders and filters. Even the interfaces are plugins for LibVLC. It is up to the developer to choose which module will be loaded. 摘于官网说明它实质处理的是ES、PES、PS、TS等流间的转换、传输与显示。对于流媒体服务器如果从文件作为输入即PS-DEMUX-ES-MUX-TS对于多媒体播放器如果采用UDP方式传输即TS-DEMUX-ES。 2 插件管理框架 在VLC中每种类型的模块中都有一个抽象层/结构体在抽象层或结构体中定义了若干操作的函数指针通过这些函数指针就能实现模块的动态载入赋值相关的函数指针的函数地址最后通过调用函数指针能调用实际模块的操作。 对于VLC所有的模块中有且仅有一个导出函数vlc_entry__(MODULE_NAME)。其中MODULE_NAME为宏定义对于main模块在\include\modules_inner.h中定义为main动态载入模块的过程是使用module_Need函数在module_bank中根据各个插件的capability等相关属性寻找第一个能满足要求并激活的模块。所谓激活是指调用插件的初始化函数成功。对于各个插件的初始化函数和析构函数均在vlc_entry__(MODULE_NAME)函数中指定了相关函数地址。因此载入各个插件动态库的过程就成为了解析动态库文件并找到其中vlc_entry__函数的地址然后运行。这样各个模块的激活函数就会赋值各个操作的函数地址以待后面函数动态调用。 具体函数调用过程如下 l  Main模块的载入过程 int main( int i_argc, char *ppsz_argv[] )src\vlc.ci_ret VLC_Init( 0, i_argc, ppsz_argv )module_InitBank( p_vlc )src\libvlc.c void __module_InitBank( vlc_object_t *p_this ) module_LoadMain( p_this )src\misc\modules.cAllocateBuiltinModule( p_this, vlc_entry__main )pf_entry( p_module )激活了main模块以上为main模块的载入过程对于main模块调用的实际函数为导出函数vlc_entry__main其它模块导出的均为vlc_entry__0_8_6 l  Module_Need函数实现载入任意模块的过程 module_t * __module_Need( vlc_object_t *p_this, const char *psz_capability, const char *psz_name, vlc_bool_t b_strict )src\misc\modules.c vlc_list_find将所有已经载入的模块查询出来然后循环根据capability查找第一个最合适的moduleAllocatePlugin动态载入所需要的插件该函数会在动态库所在目录遍历所有动态库文件p_module-pf_activate调用激活函数 l  VLC_Init函数流程 module_InitBankmodule_LoadBuiltins载入静态插件module_LoadPlugins载入动态插件VLC_AddIntf添加interface插件VLC会静态载入hotkeys模块 在VLC中根据处理任务不同会静态载入不同的模块main、memcpy、hotkeys等动态载入的模块根据处理任务不同差异很大。 3 VLC流媒体服务器体系结构 以下主要讨论VLC作为流媒体服务器时的体系结构。针对一个节目单文件调试其运行过程并最后给出总结。 该实例的播放节目单为如下 New br broadcast enabled Setup br input /mnt/hgfs/movie/caiyan.mpg Setup br output #standard{muxts,accessudp,url234.0.1.4,sap,namech1} 在例子中通过VLC提供APIlibvlc_newlibvlc_vlm_newlibvlc_vlm_play_medialibvlc_vlm_load_file等有些API是自己添加的可以完成对广播节目br的播放。 下面让我们仔细看看通过这几个接口VLC内部到底是怎么工作完成了流媒体发布的。 1.  首先程序调用libvlc_new\src\control\core.c接口实现创建一个VLC运行实例libvlc_instance_t该实例在程序运行过程中唯一。 2.  在libvlc_new接口中调用了VLC_Init函数实现具体的初始化工作。 3.  VLC_Init\src\libvlc.c函数中首先通过system_Init函数完成传入参数对系统的相关初始化接着通过module_InitBank\src\misc\modules.c函数初始化module_bank结构体并创建了main模块然后通过module_LoadBuiltins载入静态模块通过module_LoadPlugins\src\misc\modules.c函数载入动态模块通过module_Need\src\misc\modules.c函数载入并激活memcpy模块通过playlist_Create\src\playlist\playlist.c函数创建了一个playlist播放管理的线程其线程处理函数为RunThread\src\playlist\playlist.c通过VLC_AddIntf\src\libvlc.c函数添加并激活hotkeys模块最后根据系统设置定义了宏HAVE_X11_XLIB_H因此还需要添加screensaver模块。 4.  总结此时加载的模块有mainhotkeysscreensavermemcpy多创建了一个线程用于管理playlist该线程无限循环直到p_playlist-b_die状态为止。 5.  其次程序中调用libvlc_vlm_new接口创建VLM对象该接口为自己添加的。 6.  该接口调用的是vlm_New\src\misc\vlm.c函数实现VLM对象的创建函数返回值是指向vlm_t的指针。 7.  Vlm_new函数中创建了一个vlm管理线程线程处理函数为Manage\src\misc\vlm.c。该函数循环处理当前各种媒体vod、broadcast、schedule的播放实例控制其每个播放细节如从一个input切换到下一个inputschedule周期循环调度等。与playlist线程不同的是Manage主要针对播放实例的操作而RunThread主要针对播放列表的管理也就是说VLC管理是分级的播放列表级和播放列表中媒体播放实例级。 8.  其次程序调用libvlc_vlm_load_file接口载入播放节目单该接口也为自己添加播放节目单如上所述。 9.  该接口调用的是vlm_Load\src\misc\vlm.c函数在该函数中依次调用如下函数stream_UrlNew、stream_Seek、stream_Read、Load以下详细介绍各个函数作用。 a)   首先是stream_UrlNew\src\input\stream.c函数。先调MRLSplit\src\input\input.c函数完成对access、demux和path的解析。具体对于本例解析的结果为access,demux,pathaa。然后调用access2_New\src\input\access.c函数创建一个access_t结构体并初始化。具体运行时载入模块的相关参数是capabilityaccess2nameaccess_filepsz_filenameaccess/libaccess_file_plugin.so。最后调用stream_AccessNew\src\input\stream.c函数创建stream_t结构体对象并初始化对象中所有函数指针 b)   再调用stream_Seek\include\vlc_stream.h内联函数设置起始位置 c)   再调用stream_Size\include\vlc_stream.h获得大小 d)   再调用stream_Read(\include\vlc_stream.h)读取到缓冲区 e)   最后调用Load\src\misc\vlm.c完成实际的载入节目单。对于节目单文件是一行行解析并调用ExecuteCommand\src\misc\vlm.c完成解析的。Load函数的调用仅仅是设置了相关参数如设置input字符串值设置output字符串值设置mux的值及与播放相关的enabled、loop等参数。Load工作仅仅是为了下一步发布流做准备的。 10. 程序中调用libvlc_vlm_play_media接口将节目流发布出去。自己添加接口 11. 在libvlc_vlm_play_media接口中实质是创建了命令“control br play”再调用vlm_ExecuteCommand\src\misc\vlm.c完成对命令的执行根据命令类型由vlm_MediaControl\src\misc\vlm.c函数处理。 12. 在vlm_MediaControl函数中会调用vlc_input_item_Init\include\vlc_input.h函数完成播放实例的初始化并调用input_CreateThread2\src\input\input.c函数完成播放线程的创建。该线程的处理函数为Run\src\input\input.c。 13. Run线程是整个VLC作为流媒体服务器的核心。其主要分为如下几个步骤Init、MainLoop和End。其中MainLoop是一个无限循环是完成流媒体的整个发布过程。 a)   首先调用Init\src\input\input.c函数初始化相关统计参数 b)   其次再调用input_EsOutNew\src\input\es_out.c函数初始化es_out_t结构体对象和es_out_sys_t结构体对象并设置相关函数指针 c)   再调用InputSourceInit\src\input\input.c函数初始化input_thread_t对象中的input_source_t对象主要有access_t、stream_t、demux_t三个结构体对象 d)   总结此时各个模块实际载入的情况 1)   (access_t)typeaccessnameaccess_filtercapabilityaccess2psz_filenameaccess/libaccess_file_plugin.so 2)   (stream_t)typestreampf_readAStreamReadStreampf_seekAStreamPeekStreampf_controlAStreamControlpf_destoryAStreamDestory 3)   (demux_t)typedemuxcapabilitydemux2shortcutsps 4)   (sout_instance_t)typestream outpsz_capabilitysout streamshortcutstream_out_standardpsz_filename/stream_out/libstream_out_standard_plugin.so 5)   (es_out_t)pf_addESOutAddpf_sendESOutSendpf_delESOutDelpf_controlESOutControl e)   再调用MainLoop\src\input\input.c函数完成读取、解复用、解码、复用和传输 f)   MainLoop函数为无限循环直到input_thread_t对象存在b_die、b_error、b_eof时为止。在该函数中存在如下行代码 i_retp_input-input.p_demux-pf_demux(p_input-input.p_demux); 它就是流媒体服务器运行的起点所有的后续操作都会在该函数中继续衍生。 g)   Pf_demux调用的是\modules\demux\ps.c中的Demux函数在该函数中主要完成如下操作 1)   先调用ps_pkt_resynch\modules\demux\ps.c函数完成PS流中数据包重新同步这里应该涉及到多媒体相关知识需要补补 2)   再调用ps_pkt_read\modules\demux\ps.c函数最终调用stream_Block函数这个函数内部会根据实际情况调用stream_t模块中的pf_read或pf_block函数函数结果会返回一个读取的buffer 3)   根据数据包的i_code的值做不同的处理对于音视频数据流调用es_out_Send\include\vlc_es_out.h函数处理 4)   es_out_Send一个抽象层函数其通过函数指针实际调用的是EsOutSend\src\input\es_out.c函数 5)   EsOutSend函数最终会调用input_DecoderDecode\src\input\decoder.c函数 6)   input_DecoderDecode函数会调用DecoderDecode\src\input\decoder.c函数完成解码 7)   DecoderDecode函数会调用pf_packetize\modules\packetizer\mpegvideo.c函数实现PES的打包 8)   DecoderDecode函数会调用sout_InputSendBuffer\src\stream_output\stream_output.c函数实现发送 9)   sout_InputSendBuffer函数中的pf_send指针指向的是\modules\stream_out\standard.cSend函数 10)  Send函数调用的是流化输出stream_output的抽象层\src\stream_output\stream_output.c中的sout_MuxSendBuffer函数首先将要发送的数据放入fifo队列中然后调用pf_mux函数指针完成多路复用 11)  Pf_mux函数指针指向的是\modules\mux\mpeg\ts.c的Mux函数完成多路复用后最终调用\modules\mux\mpeg\ts.cTSSchedule函数准备调度发送了 12)  TSSchedule函数中调用了TSDate\modules\mux\mpeg\ts.c函数 13)  TSDate函数中调用了流化输出stream_output的抽象层\src\stream_output\stream_output.c中的sout_AccessOutWrite函数最终调用pf_write函数完成数据输出 14)  pf_write函数指向的是\modules\access_output\udp.c中的Write函数完成数据UDP发送这样数据就转换称TS流输出了 15)  总结pf_demux函数为流媒体所有操作的起点通过该处衍生了很多其他模块的处理从上面的分析可以看出系统实质就是PS、ES、PES和TS几种流间的转换针对应用场合主要指做服务器或客户端的不同转换的方式不同。
http://www.zqtcl.cn/news/935780/

相关文章:

  • 网页制作网站建设百度网站推广费用多少钱
  • 长沙网站建设软件wordpress加菜单
  • 网站建设教育板块wordpress $pagenow
  • 岳阳手机网站建设自己可以给公司做网站吗
  • 旅游网站建设目的关于建设网站的需求分析
  • 手机可以建立网站吗自己造网站
  • 厦门建网站哪家好手机编程网站
  • 网站搭建后台奥门网站建设
  • 电子商务网站免费模板展示型网站与营销型网站
  • 除了红动中国还有哪些设计网站宁波建网站哪家
  • 网站的建设费用预算策划书wdcp网站备份
  • 济南制作公司网站网站设计的实例
  • 网站建设需要的文案一个网站的后台怎么做
  • 电影网站建设模板营销方式都有哪些
  • 书店商城网站建设方案未央免费做网站
  • 北京房产网北京二手房企业网站seo方案案例
  • 大连品牌官网建站二级建造师最好的网站
  • python开发工具搜索引擎优化的英语简称
  • 做产品代理上哪个网站好东莞公司网上推广
  • 专业制作网站公司上海广告公司联系方式
  • 古交市网站建设公司四川省建设厅电子政务网站
  • 清河网站建设费用50万做网站
  • 怎么找网站的根目录平台类网站营销方案
  • 网站关键词 价格生成山西建设工程备案网站
  • 网站开发入哪个会计科目设计师自己的网站
  • php做网站界面代码定制网页设计报价
  • 重庆智能模板建站wordpress+widget+开发
  • vps网站空间时尚网站首页设计
  • 美容行业网站建设方案网站建设需求背景
  • 贵阳做网站找哪家好长沙部分风险区域调整