Android技巧: 如何读取 apk 中的 Video

Unity2021安卓端Video Player黑屏?3步搞定资源压缩与Buffer配置 本文详细解析了Unity2021安卓端Video Player黑屏问题的解决方案,重点介绍了资源压缩配置与Buffer优化两大核心步骤。通过调整视频文件导入设置、修改安卓构建配置以及优化Buffer管理,开发者可以有效解决PC端正常但安卓端黑屏的常见问题,提升视频播放稳定性与性能。 阅读详情

把 video 放在  apk 包中, 可以方便程序的安装,有两种读取的方法

从包中拆解文件再读取

video 文件放在 Prj_Dir/assets 下 ( Prj_Dir/assets/myvideo.mp4)

			
public class VideoActivity extends Activity {

    public final String TAG = "VideoActivity";
    private final String VIDEO = "myvideo.mp4";

    public boolean storeVideoFile() {
        try {
            InputStream is = getResources().getAssets().open(VIDEO);
			
            //注意,这里用 MODE_WORLD_READABLE 是因为播放Video的是MediaPlayer进程,不是本进程
            //为了让, MediaPlayer进程能读取此文件,所以设置为: MODE_WORLD_READABLE
            FileOutputStream os = openFileOutput(VIDEO, MODE_WORLD_READABLE);
			
            byte[] buffer = new byte[1024];
            while (is.read(buffer) > -1) {
                os.write(buffer);
            }
            is.close();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (!storeVideoFile())
            return;

        VideoView videoView = new VideoView(this);
        setContentView(videoView);
        // videoView.setMediaController(new MediaController(this));
        videoView.setVideoPath(getFilesDir().getAbsolutePath() + "/" + VIDEO);

        videoView.setOnPreparedListener(new OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                mp.setLooping(true);
            }
        });

        videoView.start();
    }

}			

使用URI

这种方法,更加简洁, Video 文件放 Prj_dir/raw/ 下面

public class VideoActivity extends Activity {

    public final String TAG = "VideoActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Uri uri = Uri.parse("android.resource://" + getPackageName() + "/"
                + R.raw.myvideo);
        VideoView videoView = new VideoView(this);
        setContentView(videoView);
        videoView.setVideoURI(uri);
        Log.e(TAG, " uri is:" + uri);

        videoView.setOnPreparedListener(new OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                mp.setLooping(true);
            }
        });

        videoView.start();
    }

}



Unity安卓Video Player黑屏问题:从编码到渲染的完整解决方案 视频播放是移动应用开发中的基础功能,其核心原理涉及媒体文件的解码与渲染流程。在Unity引擎中,Video Player组件封装了系统底层的解码能力,其技术价值在于为开发者提供了跨平台的视频播放接口。然而,在安卓平台上,由于系统碎片化、硬件解码差异以及渲染管线兼容性问题,视频播放常出现黑屏故障,严重影响用户体验。本文聚焦Unity 2021版本,针对安卓端Video Player黑屏这一典型问题,深入剖析其根源,涵盖视频编码格式、StreamingAssets路径、URP渲染管线兼容性等关键环节,并提供从诊 阅读详情

相关推荐

Unity2021安卓端Video Player黑屏问题排查与解决方案

本文针对Unity2021开发中常见的安卓端Video Player黑屏问题,提供了系统化的排查与解决方案。核心在于解决视频资源在APK打包时被错误压缩的问题,通过分析错误日志、调整视频导入设置,并重点修改Gradle配置(aaptOptions noCompress)来确保视频文件可被正确读取。文章还涵盖了播放性能优化、内存泄漏处理等进阶内容,帮助开发者彻底解决这一跨平台兼容性难题。

weixin_29313817的博客 566

通过手机上安装的第三方播放器来播放APK内的视频文件

通过手机上安装的第三方播放器来播放APK内的视频文件 刚开始在网上查了很多资料,因为以前做过 通过第三方播放器播放本地视频的功能 大概代码如下 Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getPath()+"/Test_Movie.m4v");      //调用系统自带的播放器    

qq_30380777的博客 4022

Unity2021安卓端Video Player黑屏问题排查与优化方案

本文详细解析了Unity2021在安卓端Video Player出现黑屏问题的原因与解决方案。从资源路径配置、压缩格式设置到内存优化与设备兼容性实践,提供了一套完整的排查与优化方案,帮助开发者高效解决跨平台视频播放问题。

weixin_29247219的博客 393

如何将视频资源放在apk中播放

1. 把视频文件放到项目工程的 res/raw 文件下。 2. 视频文件必须是Android支持视频格式(3gp, wmv, mp4),并且命名必须是小写字母,数据,下划线,例如:my_video_file.mp4 3. 当你是在代码里面引用这个资源文件时,你必须使用R statics类,同时去掉文件的后缀:R.raw.my_video_file 4. 这个Activity clas

4067

Unity跨平台视频播放实战:AVPro Video 2.7.3集成与StreamingAssets配置

在Unity开发中,视频播放是构建丰富交互体验的关键技术环节。其核心原理在于通过解码器将压缩的视频数据转换为可渲染的帧序列,并高效地呈现在游戏或应用界面上。这项技术的价值在于能够无缝集成动态视觉内容,显著提升项目的表现力和用户沉浸感,广泛应用于游戏过场动画、AR/VR场景、数字孪生可视化以及互动媒体等场景。针对Unity原生视频方案在跨平台,尤其是移动端兼容性、性能与功能上的局限,开发者常转向更专业的解决方案。本文聚焦于利用AVPro Video这一行业标杆插件,结合Unity的StreamingAsset

weixin_33793620的博客 295

apk脱壳linux,使用Frida给apk脱壳并穿透加固Hook函数

前言今天拿到了新玩具JEB 3.17.1,想测试一下,顺便学习学习Android逆向,于是找了一个apk准备试试水,看看能不能搞到VIP。初步分析拖入jeb查看嗯。。google一下几维安全的壳,虚拟化很烦,也没什么好的脱壳工具,于是切换思路从本质上来说,虚拟化就是自己实现了一套基本的cpu指令,通过自己的解释器解释给机器。因此想要在虚拟化之后仍然能让机器运行,当然还得还原代码给机器,只不过可能在...

weixin_32073537的博客 1636

Android 读取内部文件

通过获取内部存储目录和文件路径,以及使用标准的Java文件操作方法,我们可以轻松地读取内部文件的内容。在实际开发中,我们还需要注意文件不存在的情况,并添加相应的权限。在Android开发中,我们经常需要读取应用程序内部的文件,这些文件包括配置文件、用户数据等。有了文件的绝对路径,我们就可以使用标准的Java文件操作方法来读取文件内容。获取内部存储目录后,可以通过拼接文件路径来读取特定的文件。要读取内部文件,首先需要获取应用程序的内部存储目录。下面是一个示例的关系图,展示了读取内部文件的过程。

1808

OpenBOR游戏引擎跨平台移植:从Windows到Android的完整实战指南

跨平台开发是现代游戏工程中的重要实践,其核心在于通过抽象层技术实现同一套代码逻辑在不同操作系统和硬件架构上的运行。其原理通常基于C/C++这类高性能语言编写核心引擎,并利用平台抽象库(如SDL2)处理底层系统交互,从而实现“一次编写,多处部署”。这种技术方案的价值在于极大提升了代码复用率,降低了多平台维护成本,尤其对于独立开发者和复古游戏项目意义重大。在应用场景上,它广泛应用于将PC端的自制或经典游戏引擎(例如专注于2D清版动作游戏的OpenBOR引擎)迁移到移动设备。本文将以OpenBOR引擎为例,详细解

CURSED! 433

VideoView获取本地视频播放

主布局: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 xmlns:app="http://schemas.android.com/apk/r...

Snoopyboy2597的博客 405

Android学习过程之自定义video

自定义多媒体播放video 文章目录自定义多媒体播放video一、使用系统自带的VideoView播放视频注意: 当视频无法播放时,一般可能为无法打开此视频文件,此时需注意软件是否含有读取文件的权限。在读取文件之前要确保软件已经获取了文件的访问权限。 一、使用系统自带的VideoView播放视频 在资源文件中添加VideoView标签 <VideoView android:id="@+id/sys_video" android:layout_width="match_parent" an

Not_Important的博客 650

VideoPlayer APK

VideoPlayer APK

最新安卓版本对照表,API对照表(持续更新,更新到安卓17)

话不多说,直接上表,持续更新(更新到安卓16)。 列出了所有记录的可能会影响应用开发者的功能和行为变更。请使用此列表查找影响您的变更,然后点击相应的链接以阅读文档。下表列出了所有记录的可能会影响应用开发者的功能和行为变更。请使用此列表查找影响您的变更,然后点击相应的链接以阅读文档。Java 和 OpenJDK 是 Oracle 及/或其关联公司的商标或注册商标。

雨季余静的博客 9万+

creo二次开发使用映射

在creo进行二次开发时,一些无法直接通过访问底层代码来对特征进行操作,比如“镜像装配”,这个时候就可以使用映射(Mapkey)来完成一键镜像。 注:这是镜像装配的代码 ProError status; ProMacro macro; wstring Macro; strMacro = L"mapkey(continued) ~ Command ProCmdMirrorAssem ; mapkey(continued) ~ Activate mirror_component_dialog Sy

qq_49328512的博客 1607

Open Design 中的 Together AI 设计系统:从 DESIGN.md 到 tokens.css 的 AI 基建品牌设计实战

本文以 Open Design 仓库中 [design-systems/together-ai/DESIGN.md](https://link.gitcode.com/i/c350a3aec617d62117b92f42e981f19a) 为核心骨架,系统拆解 Together AI 设计系统的完整规范——从"粉色渐变梦境 + 午夜蓝研究区"的双重世界观,到 The Future 字体激进负字距的

gitblog_00609的博客 879

LM Studio Bionic:本地AI智能体从部署到实战完整指南

AI智能体作为能够自主规划、执行多步任务的人工智能系统,其核心原理在于结合大语言模型的推理能力与工具调用机制。通过状态保持和任务分解算法,智能体实现了从单次问答到持续协作的技术跃迁。在工程实践中,这种架构显著降低了复杂任务自动化的门槛,特别适用于数据敏感场景和定制化需求。以Tesla V100等专业硬件为例,本地部署能充分发挥其大显存优势,支持更高精度的模型量化格式。在实际应用层面,智能体可无缝集成到代码审查、文档生成等开发工作流中,而LM Studio Bionic通过统一界面整合了模型服务、任务规划器等

weixin_29053695的博客 646

5G核心技术:N3与N4接口深度解析

5G网络中,N3和N4接口是实现用户数据传输的核心。N3接口是gNB与UPF之间的用户面通道,采用GTP-U协议封装数据,通过UDP/IP传输,确保低时延和业务隔离。N4接口是SMF与UPF之间的控制面链路,基于PFCP协议下发转发规则(FAR/TDR/QER/URR),实现精细化流量控制。二者协同工作:N4下发策略(如QoS、计费规则),N3执行数据转发,共同支持5G三大场景(eMBB/uRLLC/mMTC),体现控制与转发分离(CUPS)架构优势。

Qinti_mm的博客 1632

LearningVideo部署指南:从源码编译到APK生成的完整流程

LearningVideo是【Android 音视频开发打怪升级】系列文章的示例代码项目,本项目将从MediaCodec硬解,FFmpeg软解,OpenGL等方面,全方位讲解如何在Android上进行音视频编辑开发。 [![Android音视频开发学习](https://raw.gitcode.com/gh_mirrors/le/LearningVideo/raw/070ae4ac6cc15a2

gitblog_00613的博客 742

CentOS7 安装天气分型软件cost733过程详解

cost733是一款天气分型软件,其内置的一些算法可以帮助气象工作者进行天气类型划分等(我也是初学者,仅仅知道一些皮毛),但是网上找到的安装办法比较少,并且总会出现一些报错,试了一晚上,终于将安装办法调通了,希望可以帮助到大家

weixin_62573024的博客 3561

【Unity3D】打包的Android应用如何播放本地视频及外置SD卡的视频

前段时间开发 VR 应用时遇到了一个问题,就是 VR 应用中需要播放全景视频,而将全景视频打包到 APK 中的话,会导致安装包过大,动辄几个GB,非常不方便,也不合适。因此,我们需要将其中的全景视频分离出来,放在 Android 的本地存储卡中,让应用在运行时动态地去读取视频文件并播放。 我使用的 Unity 3D 中 VideoPlayer 组件来播放视频(如何播放视频,或者如何播放全景视频。...

亮出锋芒,剑指苍穹 5961

全面指南:PyTorch与ROCm版本兼容性及多版本环境管理

本文详细介绍了在AMD GPU上配置PyTorch开发环境的完整流程,重点解决版本兼容性和多版本ROCm环境管理问题。主要内容包括:1) PyTorch与ROCm版本对应关系查询;2) 四种查看ROCm版本的方法;3) 使用update-alternatives管理多版本ROCm;4) 环境变量配置与冲突解决方案;5) 完整的验证流程和性能测试方法。文章提供了最佳实践建议和故障排除清单,帮助开发者快速搭建稳定高效的深度学习开发环境,充分发挥AMD GPU硬件性能。通过系统化的验证流程确保各组件协同工作,解决

数字人生 606

InfiniBand 与 RoCE 协议介绍

InfiniBand 是高性能互联的 “标杆”,以极致的低延迟、高可靠性适用于对性能要求苛刻的场景(如超算、大规模 AI 训练);而 RoCE 通过以太网实现 RDMA,平衡了性能与成本,成为数据中心和云计算的主流选择。两者均基于 RDMA 技术,核心目标是解决传统网络的 “CPU 瓶颈” 和 “延迟瓶颈”,推动高性能计算和分布式系统的发展。

jundao1997的专栏 713

【adb命令】Android实用技巧之adb命令:getprop,setprop命令使用

测试工作过程中,一些常用adb命令总结; Android实用技巧之adb命令:getprop,setprop命令使用。

weixin_45589713的博客 9992

路径跟踪 | 图解路径跟踪PID算法(附ROS C++/Python/Matlab仿真)

PID控制是一种经典的控制算法,广泛应用于各种工业场景。在基于PID的局部路径规划中,希望机器人能快速跟踪上预设的轨迹。本文介绍PID控制的基本原理,并基于PID控制律设计路径跟踪算法,最后通过ROS C++/Python/Matlab进行仿真实现,加深理解

FRIGIDWINTER的博客 1万+

Unity VR项目使用avpro video 2.6版本插件播放视频 在编辑器中播放正常,但在打包成apk之后播放视频只有声音没有画面

在porjceting的player中 选择 Android选项进入取消自动勾选 auto graphics api 选择OpenGLES3,不要勾选vulkan安卓api选择10以上使用urp的话不要勾选hdr和抗锯齿,会播放不了或者卡顿。

钢筋混凝土石头人的博客 1303

Rockchip 自定义vendorstorages数据再u-boot通过cmdline给kernel传递数据

本文介绍通过vendorstorages,允许保存和读取自定义数据。通过在U-Boot中读取这些数据并将其添加到cmdline中,将这些数据传递给Linux内核,实现了一个灵活的方式来配置和定制系统的需求。

我其实什么都不会 1816

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: 微软今年重头戏 Xbox One
下一篇: R语言: 极大似然估计实例
span76
博客等级 码龄18年 117粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值