好咖啡要和朋友一起品尝,好“模板”也要和同样喜欢它的人一起分享。 网站首页心得笔记
8. 完成了IAudioPlay和SLAudioPlay的音频播放环境初始化~1
发布时间:2021-06-11 21:37:06作者:雪饮

利用IAudioPlay和SLAudioPlay完成的音频播放环境初始化需要先在cpp/CMakeLists.txt中引入這兩個家夥:# For more information about using CMake with Android Studio, read
详细信息>>7. 完成音频重采样IResample模块的处理功能~1
发布时间:2021-06-11 17:48:59作者:雪饮

完成Iresample模块,首先在入口cpp/native-lib.cpp中打开Iresample(初始化):#include <jni.h>
#include <string>
#include <android/native_window_jni.h>
#include "FFDemux.
6. 完成音频重采样IResample模块初始化代码~1
发布时间:2021-06-11 17:00:27作者:雪饮

音频重采样,首先需要在继承Iobserver然后主要以实现Resample为主:cpp/IResample.h:#ifndef XPLAY_IRESAMPLE_H
#define XPLAY_IRESAMPLE_H
#include "XParameter.h"
#includ
5. GLVideoView完成使用shader显示视频~1
发布时间:2021-06-11 16:17:08作者:雪饮

前面实现了样本大小获取,那么样本宽高这些也应该一并获取出来:xplay/app/src/main/cpp/FFDecode.cpp:extern "C"
{
#include <libavcodec/avcodec.h>
}
#include "FFDeco
4. XTexture初始化并完成GLVideoView的调用~1
发布时间:2021-06-10 21:25:05作者:雪饮

對於質地,我們需要有創建和初始化,於是乎在cpp/XTexture.h中聲明這兩個:#ifndef XPLAY_XTEXTURE_H
#define XPLAY_XTEXTURE_H
class XTexture
{
public:
static XTextur
3. XShader基于yuv420p的初始化Init代码完成并测试~1
发布时间:2021-06-10 18:25:11作者:雪饮

首先是在cpp/native-lib.cpp中调用片元让片元初始化:#include <jni.h>
#include <string>
#include <android/native_window_jni.h>
#include "FFDemux.h"
#include "XLog.h
2. IEGL类初始化封装java部分添加XPlay窗口类~1
发布时间:2021-06-10 17:44:37作者:雪饮

首先需要初始化窗口cpp/native-lib.cpp:#include <jni.h>
#include <string>
#include <android/native_window_jni.h>
#include "FFDemux.h"
#include "XLog.h"
#include
1. IVideoView显示模块架构讲解和代码创建~1
发布时间:2021-06-10 16:57:26作者:雪饮

c++后台若使用ANativeWindow_fromSurface将surface转化为ANativeWindow;需要头文件:#include <android/native_window_jni.h>:cpp/native-lib.cpp:#include <jni.h>
#include
14. 加入生产者消费者模式控制音视频缓冲~1
发布时间:2021-06-10 11:40:18作者:雪饮

说到这个缓冲啊,其实需要定义一个最大队列缓冲限制,这样避免耗尽太多内存。cpp/IDecode.h:#ifndef XPLAY_IDECODE_H
#define XPLAY_IDECODE_H
#include "XParameter.h"
#inc
13. 完成音视频解码和并重构解码器加入观察者模式~1
发布时间:2021-06-09 20:51:20作者:雪饮

上篇咱們實現了幀數據類型的獲取,那麽接下來我們要實現觀察者的加入。那麽我們在cpp/native-lib.cpp:中調用添加觀察者:#include <jni.h>
#include <string>
#include "FFDe
12. 读取媒体帧数据获取类型信息(音频、视频)存入XData~1
发布时间:2021-06-09 18:16:42作者:雪饮

为了区分帧数据的类型,比如音频或者视频帧。则需要在cpp/FFDemux.cpp中实现GetAPara和GetVPara方法:#include "FFDemux.h"
#include "XLog.h"
extern "C"{
#include <libavfor
11. 封装FFDecode解码的Send和Recv接口~1
发布时间:2021-06-09 17:16:16作者:雪饮

接收压缩包和发送压缩包,需要实现Send和Recv接口。cpp/IDecode.h:#ifndef XPLAY_IDECODE_H
#define XPLAY_IDECODE_H
#include "XParameter.h"
#include "IObserver.h"
//
10. 添加IDemux的GetVPara获取视频XParamter参数接口用IDecode的Open测试~1
发布时间:2021-06-09 16:21:37作者:雪饮

获取视频参数的话,要在cpp/FFDemux.cpp中实现GetVPara方法:#include "FFDemux.h"
#include "XLog.h"
extern "C"{
#include <libavformat/avformat.h>
}
//打开文件,或者流媒
9. FFDecode的Open打开解码器接口编写和Observer基类添加~1
发布时间:2021-06-09 15:53:34作者:雪饮

解码器接口其实上篇就实现了,只是有个地方需要注意下cpp/FFDecode.cpp:extern "C"
{
#include <libavcodec/avcodec.h>
}
#include "FFDecode.h"
#include "XLog.h"
boo
8. IDecode和FFDecode模块代码创建~1
发布时间:2021-06-09 15:27:15作者:雪饮

封装解码器获取与具体的解码以及对于下一步的考量,对于FFDecode、Idecode、Xparameter的cpp或者头文件的完善。cpp/CMakeLists.txt:# For more information about using CMa
详细信息>>7. 观察者Observer模式的代码实现并使用IDemux进行测试~1
发布时间:2021-06-09 14:50:56作者:雪饮

先实现观察者服务好吧。cpp/CMakeLists.txt:# For more information about using CMake with Android Studio, read the
# documentation: https://d.android.com/studio/p
6. 添加了XSleep完成XThread线程函数的停止和超时判断~1
发布时间:2021-06-09 11:40:19作者:雪饮

完成线程的休眠以及停止cpp/XThread.cpp:#include "XThread.h"
#include "XLog.h"
#include <thread>
using namespace std;
void XSleep(int mis)
{
chrono::millise
5. 完成XThread线程类IDemux继承后在线程中读取帧数据~1
发布时间:2021-06-09 11:10:34作者:雪饮

用线程去读取帧数据,首先要在CMakeLists.txt中配置线程cpp# For more information about using CMake with Android Studio, read the
# documentation: https://d.android.
4. FFdemux的Read读取帧数据接口编写~1
发布时间:2021-06-09 10:30:38作者:雪饮

其实读取数据帧的接口(方法)在上一步中就已经实现了。这次主要是利用这个读取数据帧的接口。在cpp/native-lib.cpp:#include <jni.h>
#include <string>
#include "FFDemux.h
3. FFDemux的Open实现打开媒体文件~1
发布时间:2021-06-08 22:03:55作者:雪饮

上一篇把xplay項目的整體代碼結構設計好了。這次就來實現部分功能。首先嘛從文件的打開開始。但是在此之前首先把ndk環境修改下,因爲這次又回到家裏了,所以ndk環境路徑又變了
详细信息>>2. 创建安卓流媒体播放器XPlay项目并配置添加了解封装模块代码及其依赖日志类~1
发布时间:2021-06-08 17:56:33作者:雪饮

为了防止编译时候遇到arm64-v8a架构,而且现在64位比较主流。并且调整了ndk的版本。所以:app/build.gradle:plugins {
id 'com.android.application'
}
android {
co
1. 项目创建权限ABI和CMake相关库和头文件配置~1
发布时间:2021-06-08 15:11:25作者:雪饮

新建一个项目Xpay的android studio的c++支持的项目权限:AndroidManifest.xml:<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.co
11. 通过OpenglES纹理修改完成yuv文件的播放显示~1
发布时间:2021-06-08 10:33:41作者:雪饮

能够修改纹理数据和显示之后,接下来就要对yuv视频文件进行解析播放了。生成一个yuv视频文件如:ffmpeg.exe -i 1080.mp4 -pix_fmt yuv420p -s 424x240 out.yuv可以发现一个8.0
详细信息>>10. OpenglES纹理数据修改和显示~1
发布时间:2021-06-07 18:29:50作者:雪饮

要让纹理内容像是视频一样可以播放出来,需要不断的修改纹理内容各个层的内容。每次变换了纹理内容都要同步到纹理的各个层上面。每个层面都完成渲染之后就可以对本次纹理内容
详细信息>>9. opengl的yuv纹理的创建和初始化~1
发布时间:2021-06-07 17:24:54作者:雪饮

创建纹理数据需要对纹理的第一层、第二层、第三层分别进行缩小与放大的过滤、纹理格式和大小的设置。具体实例:cpp/native-lib.cpp:#include <jni.h>
#include <string>
#in