摘要:
在《Java与CC++交互JNI编程》中有讲过AttachCurrentThread和DetachCurrentThread的使用。 我们知道在jni中我们可以使用pthread或者std::thread创建线程。因为线程并不是从Java环境创建的,所以这时候创建出的线程是没有JNIEnv的。如果需 阅读全文
摘要:
简介 之前接手的老项目,从接手到现在也没怎么去维护过,突然测试那边给我提了一个ANR的BUG,由于从别人手中接手,并且此项目也不是经常需要维护,所有对项目代码并不是特别熟悉,因此解决此问题还是比较麻烦的,今天就把解决ANR的过程记录一下。 分析ANR问题 通过的logcat日志文件可以查看到ANR是 阅读全文
摘要:
不论从事安卓应用开发,还是安卓系统研发,应该都遇到应用无响应(简称ANR)问题,当应用程序一段时间无法及时响应,则会弹出ANR对话框,让用户选择继续等待,还是强制关闭。本文将带你全面解析Android之ANR日志 一、概述 解决ANR一直是Android 开发者需要掌握的重要技巧,一般从三个方面着手 阅读全文
摘要:
在Android中,封装的同步类主要有Mutex(AutoMutex)与Condition。 这两个类在android中被大量的使用,这也说明这两个类是非常重要的。 一、Mutex(AutoMutex)与Condition代码分析 1.1 Mutex(AutoMutex)代码分析 Mutex是互斥类 阅读全文
摘要:
我们在使用fopen打开文件的时候有时会出现失败返回null情况,但是我们不能直接通过log具体是什么原因导致的,所以这时我们可以通过errno和strerror获取错误码和错误信息。 我遇到的是错误码1,Operation not permitted。 经过检查是Android11,分区存储,不能 阅读全文
摘要:
一、实现seek功能 我们主要是使用ffmpeg的av_seek_frame方法实现seek功能,但是我们给外界提供seek功能的方法可以不叫seek,我这里使用setTime方法,单位是秒。 /** * 移动视频到指定的关键帧位置 * * @param s 输入媒体的上下文 * @param st 阅读全文
摘要:
简介 音视频同步的实现可以有两种方式 视频同步到音频 音频同步到视频 我们这里选择第一种,因为音频播放的频率是SDL控制的,我们没法改变,所以使用视频同步到音频。 实现音视频同步 在videoplayer.h先定义两个全局变量,用于记录音频时钟和视频时钟 /** 音频时钟,当前音频包对应的时间值 * 阅读全文
摘要:
一、简介 上节介绍了使用SDL播放音频,这节介绍视频显示,其解码流程跟音频差不多。 解码视频是比较耗时的,需要我们自己开个线程去解码,而音频是SDL帮我们管理了子线程去解码音频,初始化音频SDL后就开始进行播放(SDL_PauseAudio(0);)了,一播放就会调用回调函数(sdlAudioCal 阅读全文
摘要:
一、简介 接着上节的音频解码,使用SDL播放音频。 通过上节程序运行打印发现这些音频信息明显不符合SDL的,所以我们需要进行重采样 二、音频重采样 这里我们可以参考之前的《12_采样格式&音频重采样》来实现现在的重采样。 2.1 引入头文件 extern "C" { #include <libswr 阅读全文
摘要:
一、简介 如上图,我们在主线程中开启一个子线程进行解封装,然后在开两个线程分别进行视频解码和音频解码,其中音频解码我们使用的是SDL去渲染,SDL自己会管理子线程,不用我们来创建子线程,而视频解码是需要我们自己创建子线程进行管理。 解封装会解出视频包和音频包,分别塞入各自的队列中,然后各自解码器取出 阅读全文