好咖啡要和朋友一起品尝,好“模板”也要和同样喜欢它的人一起分享。 网站首页心得笔记
11. XTexture和GLVideoView的线程安全和清理函数编写~1
发布时间:2021-06-13 19:50:01作者:雪饮
同樣的爲了實現綫程安全,這次輪到XTexture和GLVideoView了。首先在cpp/GLVideoView.cpp中實現:#include "GLVideoView.h"
#include "XTexture.h"
#include "XLog.h"
void GLV
10. XShader线程安全处理和Close清理函数编写~1
发布时间:2021-06-13 17:44:11作者:雪饮
前面實現了XEGL的线程安全处理和Close清理函数编写,這次就要實現XShader的了,先從頭文件cpp/XShader.h開始:#ifndef XPLAY_XSHADER_H
#define XPLAY_XSHADER_H
#include <mut
9. XEGL的线程安全处理和Close清理函数编写~1
发布时间:2021-06-13 16:41:18作者:雪饮
前面實現了SLAudioPlay的线程安全处理和Close清理函数编写,對於XEGL同樣也要實現綫程安全以及close清理函數,都差球不多。首先cpp/XEGL.h:#ifndef XPLAY_XEGL_H
#define XPLA
8. SLAudioPlay的线程安全处理和Close清理函数编写~1
发布时间:2021-06-13 16:01:10作者:雪饮
上次忘了處理cpp/IAudioPlay.h中的close清理函數,這個也是有必要的:#ifndef XPLAY_IAUDIOPLAY_H
#define XPLAY_IAUDIOPLAY_H
#include <list>
#include "IObserver.h"
#in
7. FFdecode和FFResample线程安全处理和Close清理函数编写~1
发布时间:2021-06-13 15:06:59作者:雪饮
綫程安全除了要處理pts自身外,還要處理close清理的時候,則cpp/FFdecode.cpp:extern "C"
{
#include <libavcodec/avcodec.h>
#include <libavcodec/jni.h>
}
#inclu
6. IDemux&FFdemux线程安全和Close清理函数编写~1
发布时间:2021-06-13 13:48:33作者:雪饮
爲了綫程安全,這裏要在cpp/FFDemux.cpp中加上同步鎖:#include "FFDemux.h"
#include "XLog.h"
extern "C"{
#include <libavformat/avformat.h>
}
//分数转为浮点数
static
5. 统一换算pts为毫秒使用IPlayer完成音视频同步播放~1
发布时间:2021-06-13 12:10:55作者:雪饮
為實現音視頻同步需要轉換pts,則cpp/FFDemux.cpp:#include "FFDemux.h"
#include "XLog.h"
extern "C"{
#include <libavformat/avformat.h>
}
//分数转为浮点数
static do
4. 完成IPlayerProxy代理模式并进行测试架构搭建完成~1
发布时间:2021-06-13 10:56:52作者:雪饮
要完成代理模式,這裏先要在cpp/CMakeLists.txt中引入代理模式的程序和頭文件,假定為IPlayerPorxy,則:# For more information about using CMake with Android Studio, read th
详细信息>>3. 完成Builder模式的IPlayerBuilder构建IPlayer对象~1
发布时间:2021-06-12 21:39:47作者:雪饮
其實吧爲了實現建造者模式,這裏現在需要新增IPlayerBuilder和FFPlayerBuilder以用來對之前的結構進行進一步的封裝優化,那麽首先在cpp/CMakeLists.txt中加入這兩個cpp、頭文
详细信息>>2. 完成Iplayer开始播放和窗口初始化接口~1
发布时间:2021-06-12 20:19:42作者:雪饮
這次主要是改造IPlayer::Start()方法以實現門面的最大化,對用戶應該是最小化調用cpp/IPlayer.cpp:#include "IPlayer.h"
#include "IDemux.h"
#include "IDecode.h"
#includ
1. 完成facade模式的IPlayer并实现Open接口.~1
发布时间:2021-06-12 18:35:07作者:雪饮
這次呀主要是新增兩個文件,一個頭文件一個對外提供門面接口的程序cpp這樣就實現了對後臺程序模塊對於用戶調用來説是不可見的:Cpp/IPlayer.h:#ifndef XPLAY_IPLAYER_H
#defin
12. 解决android8.0下opengles不能播放的问题和音频播放的回音问题~1
发布时间:2021-06-12 17:34:00作者:雪饮
首先呢要在入口cpp/native-lib.cpp中初始化硬解編碼:#include <jni.h>
#include <string>
#include <android/native_window_jni.h>
#include "FFDemux.h"
#include "XLog.
11. 完成硬解码并完成NV21和NV12格式的shader显示编写~1
发布时间:2021-06-12 15:34:08作者:雪饮
首先要在cpp/FFdecode.cpp中實現硬解碼:extern "C"
{
#include <libavcodec/avcodec.h>
#include <libavcodec/jni.h>
}
#include "FFDecode.h"
#include "XLog.h"
10. SLAudioPlay音频播放完成并测试对MP4文件音视频播放~1
发布时间:2021-06-12 11:50:46作者:雪饮
首先在cpp/ IAudioPlay.cpp中實現GetData方法用來讀幀數據。同時實現update用來更新緩衝隊列:#include "IAudioPlay.h"
#include "XLog.h"
XData IAudioPlay::GetData()
{
9. IAudioPlay的Update将音频压入缓冲队列并测试~1
发布时间:2021-06-12 10:33:48作者:雪饮
為實現緩衝我們需要有緩衝隊列和互斥量,於是乎在cpp/IAudioPlay.h:#ifndef XPLAY_IAUDIOPLAY_H
#define XPLAY_IAUDIOPLAY_H
#include <list>
#include "IObserver.h"
#in
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