基于NDK、C++、FFmpeg的android视频播放器开发实战
基于NDK、C++、FFmpeg的android视频播放器开发实战
课程介绍及音视频基础知识
AndroidStudio开发工具和开发环境准备
Android NDK交叉编译FFMpeg并添加测试AS项目
- 安卓NDK相关概念ABI、NEON、JNI和CMAKE分析
- NDK中CPU的应用二进制界面ABI
- ubuntu虚拟机及常用工具安装并配置samba共享目录
- ffmpeg源码下载在android下的编译参数分析讲解
- 在ubuntu下交叉编译ffmpeg的android版本库
- ffmpeg通用编译bash脚本编写、硬解码、neon、多线程解码性能对比
- AndroidStudio项目配置权限、jni库路径、ABI和CMake参数和讲解
- cmake配置(导入库、头文件、链接)分析
- 创建支持ffmpeg的AndroidStudio项目并调用其接口在界面显示库配置信息
- JNI和c传递文件路径并设置app的读写权限
FFmpeg解封装(C++ NDK)
- ffmpeg SDK软硬解码流程说明
- ffmpeg音视频解封装用到的函数和结构体详解
- avformat_open_input函数详解并示例打开mp4文件
- AVFormatContext结构分析和清理代码示例
- avformat_find_stream_info探测获取封装上下文的格式信息
- AVStream和AVCodecParameters分析
- 通过遍历获取AVStream音视频流信息并打印参数
- 通过av_find_best_stream获取音视频流索引
- av_read_frame读取帧数据函数分析和产生的空间问题分析
- AVPacket结构解析空间申请-初始化-复制-引用计数函数讲解
- av_seek_frame改变播放进度函数详解
- av_read_frame和av_seek_frame代码示例并分析内存占用和清理情况
FFmpeg软硬解和多线程解码(C++ NDK)
FFMpeg音频重采样和视频格式转换和显示
OpenSLES音频播放
EGL和OpenGLES Shader显示YUV视频
视频播放器项目实战一 需求和设计模式
视频播放器项目实战二 音视频解码解封装
- 项目创建权限ABI和CMake相关库和头文件配置
- 创建安卓流媒体播放器XPlay项目并配置添加了解封装模块代码及其依赖日志类
- FFDemux的Open实现打开媒体文件
- FFdemux的Read读取帧数据接口编写
- 完成XThread线程类IDemux继承后在线程中读取帧数据
- 添加了XSleep完成XThread线程函数的停止和超时判断
- 观察者Observer模式的代码实现并使用IDemux进行测试
- IDecode和FFDecode模块代码创建
- FFDecode的Open打开解码器接口编写和Observer基类添加
- 添加IDemux的GetVPara获取视频XParamter参数接口用IDecode的Open测试
- 封装FFDecode解码的Send和Recv接口
- 读取媒体帧数据获取类型信息(音频、视频)存入XData
- 完成音视频解码和并重构解码器加入观察者模式
- 加入生产者消费者模式控制音视频缓冲
视频播放器项目实战三 音视频播放
- IVideoView显示模块架构讲解和代码创建
- IEGL类初始化封装java部分添加XPlay窗口类
- XShader基于yuv420p的初始化Init代码完成并测试
- XTexture初始化并完成GLVideoView的调用
- GLVideoView完成使用shader显示视频
- 完成音频重采样IResample模块初始化代码
- 完成音频重采样IResample模块的处理功能
- 完成了IAudioPlay和SLAudioPlay的音频播放环境初始化
- IAudioPlay的Update将音频压入缓冲队列并测试
- SLAudioPlay音频播放完成并测试对MP4文件音视频播放
- 完成硬解码并完成NV21和NV12格式的shader显示编写
- 解决android8.0下opengles不能播放的问题和音频播放的回音问题
频播放器项目实战四 完成架构解决同步和seek
- 完成facade模式的IPlayer并实现Open接口
- 完成Iplayer开始播放和窗口初始化接口
- 完成Builder模式的IPlayerBuilder构建IPlayer对象
- 完成IPlayerProxy代理模式并进行测试架构搭建完成
- 统一换算pts为毫秒使用IPlayer完成音视频同步播放
- IDemux&FFdemux;线程安全和Close清理函数编写
- FFdecode和FFResample线程安全处理和Close清理函数编写
- SLAudioPlay的线程安全处理和Close清理函数编写
- XEGL的线程安全处理和Close清理函数编写
- XShader线程安全处理和Close清理函数编写
- XTexture和GLVideoView的线程安全和清理函数编写
- IPlayer完成Close清理函数编写并完成多次打开视频文件的测试
- 添加打开视频按钮和进度滑动条并响应打开事件
- 添加视频打开路径和香港卫视rtmp打开路径的界面
- 完成通过界面多次打开视频文件,修正了多次打开显示出现的bug
- 在835cpu的手机中测试并修正了音频播放Close的bug
- 完成了播放进度的显示并修正了硬解码参数传递错误
- 滑动条拖动Seek视频开发策略详细分析
- 完成了IDemux的Seek和界面SeekBar的事件响应
- 添加了视频播放的暂停和恢复
- 修改了视频播放到结尾再次打开会锁死的bug
- 通过手动解码帧数据完成了IPlayer控制视频播放进度的功能
提交答案
视频学习中有任何产品建议都可由此反
馈,我们将及时处理!
馈,我们将及时处理!
课时介绍
完成了IDemux的Seek和界面SeekBar的事件响应-频播放器项目实战四 完成架构解决同步和seek基于NDK、C++、FFmpeg的android视频播放器开发实战
课程介绍
课程包含了对流媒体(拉流)的播放,演示了播放rtmp的香港卫视,支持rtsp摄像头和http网络视频的播放,支持访问本地的视频文件,并精确显示和控制播放进度:
1讲解如何编译Android平台的ffmpeg库,使其支持neon技术和硬解码,并测试性能
2使用opengles的NDK shader高效播放yuv视频,不耗费cpu性能更优(GPU)
3代码支持硬解码(省电不耗cpu)和多线程解码(高性能每秒解码240帧1080p)
4支持网络流媒体(rtmp,rtsp,http)可直接拉流播放电视并支持rtsp摄像头访问
5课程将设计模式应用到实践 - 观察者,构建者,门面,代理,适配器,单件模式
推荐课程
