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

在线做爰 视频网站昆山公司网站建设电话

在线做爰 视频网站,昆山公司网站建设电话,网站权重怎么做,移动端网站交互效果最好的上节学到setDataSource()时会创建各种Source#xff0c;source用来读取音视频源文件#xff0c;读取到之后需要demux出音、视频、字幕数据流#xff0c;然后再送去解码。那么负责进行demux功能的media extractor模块是在什么时候阶段创建的#xff1f;这里暂时不考虑APP创建…上节学到setDataSource()时会创建各种Sourcesource用来读取音视频源文件读取到之后需要demux出音、视频、字幕数据流然后再送去解码。那么负责进行demux功能的media extractor模块是在什么时候阶段创建的这里暂时不考虑APP创建的情况以前面学过的GenericSource为例它是在prepare阶段被创建的。本节暂时不分析GenericSource创建extractor的流程先来看看MediaExtractorService的启动过程。 mediaextractor MediaExtractorService的服务名为mediaextractor //frameworks/av/services/mediaextractor/mediaextractor.rc service mediaextractor /system/bin/mediaextractorclass mainuser mediaexgroup drmrpc mediadrmioprio rt 4writepid /dev/cpuset/foreground/tasks 直接看main函数 //frameworks/av/services/mediaextractor/main_extractorservice.cpp int main(int argc __unused, char** argv) {#if __has_feature(hwaddress_sanitizer)ALOGI(disable media.extractor memory limits (hwasan enabled)); #elseALOGI(enable media.extractor memory limits);limitProcessMemory(ro.media.maxmem, /* property that defines limit */SIZE_MAX, /* upper limit in bytes */20 /* upper limit as percentage of physical RAM */); #endifsignal(SIGPIPE, SIG_IGN);//b/62255959: this forces libutis.so to dlopen vendor version of libutils.so//before minijail is on. This is dirty but required since some syscalls such//as pread64 are used by linker but arent allowed in the minijail. By//calling the function before entering minijail, we can force dlopen.android::report_sysprop_change();SetUpMinijail(kSystemSeccompPolicyPath, kVendorSeccompPolicyPath);strcpy(argv[0], media.extractor);spProcessState proc(ProcessState::self());spIServiceManager sm defaultServiceManager();MediaExtractorService::instantiate();ProcessState::self()-startThreadPool();IPCThreadState::self()-joinThreadPool(); } 由于MediaExtractorService继承自模板类BinderService所以直接调用它的instantiate()来创建service且加入service manager中 //frameworks/native/include/binder/BinderService.h static void instantiate() { publish(); }static status_t publish(bool allowIsolated false,int dumpFlags IServiceManager::DUMP_FLAG_PRIORITY_DEFAULT) {spIServiceManager sm(defaultServiceManager());return sm-addService(String16(SERVICE::getServiceName()), new SERVICE(), allowIsolated,dumpFlags); } 接下来主要看MediaExtractorService构造函数做了什么 //frameworks/av/services/mediaextractor/MediaExtractorService.cpp MediaExtractorService::MediaExtractorService() {MediaExtractorFactory::LoadExtractors(); } 其直接调用到MediaExtractorFactory中的LoadExtractors()方法 //frameworks/av/media/libstagefright/MediaExtractorFactory.cpp // static void MediaExtractorFactory::LoadExtractors() {Mutex::Autolock autoLock(gPluginMutex);if (gPluginsRegistered) {return;}gIgnoreVersion property_get_bool(debug.extractor.ignore_version, false);std::shared_ptrstd::listspExtractorPlugin newList(new std::listspExtractorPlugin());android_namespace_t *mediaNs android_get_exported_namespace(com_android_media);if (mediaNs ! NULL) {const android_dlextinfo dlextinfo {.flags ANDROID_DLEXT_USE_NAMESPACE,.library_namespace mediaNs,};RegisterExtractors(/apex/com.android.media/lib #ifdef __LP64__64 #endif/extractors, dlextinfo, *newList);} else {ALOGE(couldnt find media namespace.);}RegisterExtractors(/system/lib #ifdef __LP64__64 #endif/extractors, NULL, *newList);RegisterExtractors(/system_ext/lib #ifdef __LP64__64 #endif/extractors, NULL, *newList);newList-sort(compareFunc);gPlugins newList;for (auto it gPlugins-begin(); it ! gPlugins-end(); it) {if ((*it)-def.def_version EXTRACTORDEF_VERSION_NDK_V2) {for (size_t i 0;; i) {const char* ext (*it)-def.u.v3.supported_types[i];if (ext nullptr) {break;}gSupportedExtensions.push_back(std::string(ext));}}}gPluginsRegistered true; } 简单描述下这段代码所做的操作 创建一个list用来保存即将获取到的指向ExtractorPlugin对象的sp指针。依次到如下目录通过RegisterExtractors()方法逐个注册ExtractorPlugin到list中 /apex/com.android.media/lib(64)/extractors/system/lib(64)/extractors/system_ext/lib(64)/extractors将list内的内容按extractor_name从小到大的顺序重新排序并将其保存到gPlugins中。最后一个for循环主要是将各个extractor所支持的mime type或者文件扩展名保存到gSupportedExtensions中可用于后续查询。 再简单看看RegisterExtractors()方法 //frameworks/av/media/libstagefright/MediaExtractorFactory.cpp void MediaExtractorFactory::RegisterExtractors(const char *libDirPath, const android_dlextinfo* dlextinfo,std::listspExtractorPlugin pluginList) {ALOGV(search for plugins at %s, libDirPath);DIR *libDir opendir(libDirPath);if (libDir) {struct dirent* libEntry;while ((libEntry readdir(libDir))) {if (libEntry-d_name[0] .) {continue;}String8 libPath String8(libDirPath) / libEntry-d_name;if (!libPath.contains(extractor.so)) {continue;}void *libHandle android_dlopen_ext(libPath.string(),RTLD_NOW | RTLD_LOCAL, dlextinfo);if (libHandle nullptr) {ALOGI(dlopen(%s) reported error %s, libPath.string(), strerror(errno));continue;}GetExtractorDef getDef (GetExtractorDef) dlsym(libHandle, GETEXTRACTORDEF);if (getDef nullptr) {ALOGI(no sniffer found in %s, libPath.string());dlclose(libHandle);continue;}ALOGV(registering sniffer for %s, libPath.string());RegisterExtractor(new ExtractorPlugin(getDef(), libHandle, libPath), pluginList);}closedir(libDir);} else {ALOGI(plugin directory not present (%s), libDirPath);} } 主要功能如下 遍历指定目录下的所有后缀为extractor.so的库并将其通过dlopen()打开。再通过dlsym()方法获取到GETEXTRACTORDEF()函数的指针。对于每一个extractor创建一个对应的ExtractorPlugin然后将他们一个个的加入pluginList中。 到此MediaExtractorService就启动完成了所做的事情也是相当简单加载目标目录下所有的extractor并保存到一个list中。 MediaExtractorService还提供了另外两个接口makeExtractor()和makeIDataSource()。通过搜索code大概总结一下 makeIDataSource()提供给GenericSource调用用于根据本地播放文件创建出一个IDataSource对象。这个对象进一步会被封装成一个TinyCacheSource对象用于后面创建extractor。makeExtractor()会被封装到MediaExtractorFactory::Create()方法中该方法会被GenericSource调用还会被JNI/JAVA调用来创建extractor。 简单以图来总结下
http://www.hkea.cn/news/14571614/

相关文章:

  • 如何做网站网页流程wordpress分页上一页
  • 我的网站域名是什么网站开发工程师应聘书范文1000
  • 哪里 教做网站带维护潍坊网站制作招聘
  • 手机老是下载一些做任务的网站十大招标网站排行榜
  • 苏州免费网站制作网站标题与关键词
  • 供需网站开发十大免费模板网站
  • 有哪些做企业网站的网站阵地建设管理办法
  • 什么公司需要网站建设简约网站后台
  • 东莞外贸网站推广黑马程序员培训怎么样
  • 品牌网站大全word做招聘网站
  • p2p网站开发维护有域名和服务器怎么建网站
  • 建设网站注意哪几点做网站工资多钱
  • 西安建设教育网站企业网站下载
  • 阿里云网站建设里云官网模版哪个行业对网站建设需求大
  • 电子商务网站建设论文专业建站公司主要做什么
  • 网站建设 栏目管理制作网页编码
  • 360网站卖东西怎么做做搜狗pc网站排
  • 关于企业网站建设的提案淘宝拍卖网官网首页
  • 企业商务网站有哪些广州免费核酸在哪里做
  • 怎么在网站标头做图标wordpress表情按钮
  • 做男女之间的事情的网站邯郸做网站推广的公司
  • 上海推广网站公司深圳优化公司公认安高粱seo
  • 电商网站备案流程网站访问流程
  • 重庆高端品牌网站建设wordpress安装后
  • 天元建设有限公司网站长沙公司网站模板制作方案
  • 李洋网络做网站怎么样找长期合作五金加工厂
  • 辽宁省建设工程网seo 优化思路
  • 网站地区分站系统网站合作推广方案
  • 上海网站推广找哪家计算机应用技术ui设计是什么
  • 金华建设技工学校网站trinseo公司