有了源码该如何使用
1. 将Assets文件夹下的源码资源(如烂滑资源)拖拽至Unity编辑器中,Unity会自动识别并关联其他相关文件夹。安装安装这些文件夹中包含项目设置、源码短信通 源码Unity支持库以及脚本引用等内容,安装安装通常无需对这些进行调整。源码
2. 源代码系列皮肤是安装安装拳头公司创作的一款科幻题材的皮肤。拳头公司还制作了其他科幻系列皮肤,源码包括源计划系列、安装安装未来战士系列、源码战地机甲系列、安装安装霸天系列以及银河魔装机神系列。源码
FFmpeg读取Assets资源文件
在Android开发中,安装安装我们经常将原生资源文件放置于assets目录下,以便在需要时进行读取。通过API提供的cygwin 源码编译resources.assets.open(filename)/openFd(filenam)方法,可以方便地获得InputStream或FileDescriptor。然而,在使用FFmpeg读取assets资源文件时,遇到了难以克服的困难。主要问题是,FFmpeg在读取媒体文件时通过传入的URL来判断IO协议,因此,为了使FFmpeg正确读取assets文件,我们需要选择合适的IO协议构造URL并传入avformat_open_input(...)方法,但实际上操作起来似乎问题重重。
AssetFileDescriptor提供了资源文件的有效文件标识符。是否可以通过此fd来打开媒体文件?答案是肯定的。然而,assets返回的AssetFileDescriptor带有mStartOffset,这意味着实际的有效数据需要从mStartOffset处开始读取。
在Stackoverflow上,有人提出了类似的gzip压缩源码问题:如何通过AssetFileDescriptor正确地将assets文件传递给FFmpeg使用JNI在Android中。实现方式是在调用avformat_open_input(...)方法之前手动创建AVFormatContext并设置skip_initial_bytes参数。
在使用上述方法时,发现无法正常解码mp4(mov格式)视频文件,Stackoverflow上也有类似的反馈。尽管解码失败,但可以获取视频文件的基本信息。查看FFmpeg的日志后,发现FFmpeg在解析mp4文件信息时并未出错,正确识别了ftyp、mdat、moov等关键atom,但在后续解析中正常解析了sample与chunk的映射关系(stsc),但在解码阶段报出明显的Invalid NAL unit size异常。
分析表明,assets目录下的媒体文件可能被Android进行了特殊处理。然而,从AssetFileDescriptor的vb bse源码官方描述中可以得知,Android并没有对assets下的文件进行特殊处理。在Android音视频开发中,我们经常使用MediaCodec的setDataSource(fd)方法传递媒体数据,MediaCodec仍然可以正常读取assets资源文件,这引发了一个疑问:在使用Android的AssetFileDescriptor时是否需要特殊的处理?MediaCodec是如何处理AssetFileDescriptor的?
搜索源码后发现,MediaExtractor#setDataSource所调用的native方法为NuMediaExtractor::setDataSource,该方法最终将fd封装为FileSource对象。FileSource中读取数据的操作使用了普通的linux内核函数read,这一过程并没有对fd做任何特殊的处理。
在FFmpeg中,文件协议处理在libavformat/file.c中。比较FFmpeg与MediaCodec处理AssetFileDescriptor的逻辑,两者都使用了read函数,不同的是file_read函数中并没有seek相关的逻辑。这说明libavformat/file.c中封装的是基础的IO操作,并未包含其他无关逻辑。FFmpeg将所有的xposed 源码分析IO协议封装为URLProtocl结构体。在mov格式中的定义为:
FFmpeg与MediaCodec在读取AssetFileDescriptor时都使用了read函数,但暂时无法确定FFmpeg内部seek的逻辑是否存在问题。怀疑FFmpeg可能没有正确处理AssetFileDescriptor的startOffset。测试AVFormatContext中的skip_initial_bytes是否存在问题。
在Android应用层和Native层进行了相关测试,正常解码。应用层调用与上述相同,Native层需要设置skip_initial_bytes变量。测试结果:不能正常解码,可以获取媒体文件基本信息,日志与上述“问题”中的日志相同。这表明FFmpeg在处理mp4(mov格式)文件时,如果设置了AVFormatContext的skip_initial_bytes变量,FFmpeg将不能正确读取和解码文件。
原因在于,在调用重要函数init_input之后,avformat_open_input将文件seek到了指定的offset位置,但并没有进行其余处理逻辑。随后,avformat_open_input将调用AVInputformat中的read_header函数指针,该指针指向对应文件格式的函数,在mov格式中的read_header函数为mov_read_header。mov_read_header函数中,FFmpeg将根据read_header解析到的位置重新seek,导致从av_read_frame获得的AVPacket中的数据是错误的数据,因此给到编码器也无法正常解码。
解决方案相对简单,因为mov.c解析atom时只传递了AVIOContext,因此在AVIOContext中添加了同样的skip_initial_bytes字段。在调用mov_build_index并在AVIndexEntry(采样映射关系的结构体)赋值pos时加上相应的skip_initial_bytes。这种方案已被提交到Github,并详细说明了修改的文件。基于WhatTheCodec工程编写的新demo经过测试,并没有发现其他问题。如有其他问题,欢迎交流并互相学习。
在上述Stackoverflow的提问中,有提到使用pipe协议,实际上这种方式也是可行的。但在实现过程中,发现了一些需要注意的问题。为了更具有通用性,在Native层手动创建了pipe,并将pipe的输出端fd给到FFmpeg,输入端fd由应用层持有并在IO线程中写入数据。这样,我们便可以利用pipe协议灵活地写入数据,甚至可以把内存中的视频数据直接传入FFmpeg中。
总结本文,分析了使用AssetFileDescriptor向FFmpeg传递数据时遇到的问题,这一问题实际上是由于FFmpeg在解析mov格式文件时未能正确处理skip_initial_bytes所致。分享了在使用pipe协议时遇到的问题与解决方案。这两个问题的解决可能会大大方便FFmpeg在Android上的使用。虽然MediaCodec在音视频开发的部分场景中已经渐渐取代了FFmpeg,但FFmpeg的通用性、稳定性和兼容性使之仍然可能在未来的Android音视频开发中长期存在。
å¦ä½ä½¿ç¨Unity Studio
1ãé¦å ä¸è½½ä¸ä¸ªUnityStudioã2ãè¿éé¢ææ°ççæ¬æ¯v0.6.4ï¼æè°ç¨æ°ä¸ç¨æ§ï¼å°±ç¨è¿ä¸ªå°±å¯ä»¥äºãæ ¹æ®çµèç³»ç»ï¼å¯ä»¥èªè¡éæ©ä½æè ä½çzipå ï¼ä¸é¢çæ¯æºç ï¼è¿éåªæ¯è®²ä½¿ç¨ï¼å°±ä¸ä¸è½½äºã
3ãæè¿ééæ©çæ¯ä½çï¼å°±ä»¥è¿ä¸ªä¸ºä¾ã
4ãæ¾å°ä¸è½½çzipå ï¼è§£åå°æå®ä½ç½®ï¼æè¿éæ¯è§£åå°å½åæ件夹ä¸ã
5ãæå¼è§£ååçæ件夹ï¼åå»Unity Studio.exeã
6ãç¹å»èåfileä¸çLoad Folder...ï¼è½½å ¥unity游æçAssets->bin->dataæ件夹ï¼æ³¨æè¿ä¸ªæ¶ådataæ件夹çåæ件夹ä¸è½è·åç¦ç¹ï¼å¦åä¼ç»§ç»æå¼åæ件夹ãç¹å»æå¼ã
7ãéæ©Assets Listï¼å¯ä»¥çå°éé¢æå¾å¤æ件
8ãæ¥ä¸æ¥ç¹å»typeï¼åä¸ä¸æåºï¼å¦åç´æ¥æåèµæºï¼å¯è½ä¼æ¥éã
9ãæåºä¹åï¼ä¼çå°æå¾å¤ç±»åï¼shaderï¼textAssetï¼è¿éæ们æ¾å°Texture2Dç±»åçï¼éæ©å ¶ä¸æ³è¦ç
ãç¹å»èåå·¥å ·æ éçExport->Selected Assetsï¼ç¹å»ç¡®å®->ä¿åã
ãè¿æ ·ï¼ä¸ä¸ªå称为Texture2Dçæ件夹就æååºæ¥äºï¼éé¢æ¯æ们ååæååºæ¥çå¾çèµæºã
2.在Ubuntu安装 CARLA 的详细教程
CARLA在Ubuntu系统上的源码构建安装教程 当前CARLA版本更新至0.9.,本文将针对最新版本的安装过程进行详细阐述。不同版本的安装方法基本一致,但某些细微差异需要在具体版本的安装教程中关注。 Linux环境搭建 在开始之前,确保您的Ubuntu系统满足以下要求:系统版本
软件依赖
请使用相同的编译器版本和C++ runtime library来编译所有内容,CARLA团队推荐使用clang-8或Ubuntu .的clang-与LLVM的libc++。更改默认编译器可能会导致兼容性问题。 使用pip或pip3安装CARLA Python API,需要版本.3或更高。检查当前Python版本是否符合要求。 Python依赖项包括:Unreal Engine
从0.9.版本开始,CARLA使用了Unreal Engine 4.的特定版本。下载此分支需关联GitHub账户。以下步骤指导您完成账户连接和Unreal Engine的安装:GitHub与Unreal Engine连接操作指南
注册GitHub账号(如有已有跳过)
登录Unreal Engine账户并打开仪表板
在仪表板中选择“连接”选项卡,然后选择GitHub图标下方的连接按钮
完成OAuth授权过程,授权EpicGames应用
接受邮件邀请或点击链接完成账户链接
Unreal Engine安装
使用git clone命令下载Unreal Engine 4.分支内容
切换目录至UnrealEngine_4.
执行编译操作,这可能需要一两个小时
使用UE4Editor打开编辑器以检查安装状态
编译CARLA
使用sudo apt-get install aria2加速下载过程
克隆CARLA仓库
获取assets,使用特定脚本自动执行此操作
对于特定版本的资产下载,参考Util/ContentVersions.txt文件
更新CARLA至所需版本
配置Unreal Engine环境变量
编译Python API客户端与服务器
启动仿真
执行`make PythonAPI`命令编译Python API客户端,`make launch`启动服务器。 在城镇中开始模拟,使用WASD键控制相机移动和旋转,测试模拟器与PythonAPI\examples目录中的示例脚本进行互动。常见安装问题解决方案
遇到问题时,查阅FAQ或在CARLA论坛上提问。常见问题及解决方案包括:libobjc-5-dev冲突问题
git clone过程中出现RPC错误
Unreal Engine启动错误
编译CARLA客户端时遇到错误
xerces-c库版本不匹配
遵循上述指南及解决办法,您应能顺利在Ubuntu系统上安装CARLA。安卓反编译之后功能性代码在哪里。。。知道不
assets是html文件,lib是jar,res是资源文件,AndroidManifest是配置文件
源码在smali和original里面。
打开smali后出现几个文件夹,然后看Android下面的代码。
2024-11-30 14:49
2024-11-30 14:35
2024-11-30 13:18
2024-11-30 12:31
2024-11-30 12:07