该内容需要权限查看
解锁内容
适合人群:
C++开发者想要学习android平台开发,项目需要音视频处理,想要学习NDK开发实战
你将会学到:
学习编译安卓平台的ffmpeg库(支持硬解码和neon),学习ffmpeg的解码解封装接口,学习opensles播放音频,学习opengles、egl、shader、glsl播放yuv视频,学习音视频同步策略,学习将设计模式应用到实际项目中。
课程简介:
课程名称:FFmpeg安卓流媒体播放器开发实战
适用人群:学习c++基础语法
学习本课程的学员要求:
本课程是具有实战性的应用编程,课程中会从原理讲解到代码实现,但由于项目有一定复杂度,希望学习本课程的同学要学习c++的基本语法,课程中也用到java的代码但比较少,如果是c++程序员可以把我的java代码直接拿过去用,不一定要有java编程基础。
课程说明
课程包含了对流媒体(拉流)的播放,演示了播放rtmp,支持rtsp摄像头和http网络视频的播放,支持访问本地的视频文件,并**显示和控制播放进度。
课程特色
1 课程由浅入深,原理讲解+代码实操演示,并提供全部课程源码
2 讲解如何编译Android平台的ffmpeg库,使其支持neon和硬解码,并测试性能
3 使用opengles的NDK shader高效播放yuv视频,不耗费cpu性能更优
4 代码支持硬解码(省电不耗cpu)和多线程解码(高性能每秒解码240帧1080p)
5 支持网络流媒体(rtmp,rtsp,http)可以直接拉流播放电视并支持rtsp摄像头访问
6 使用opensles NDK 原生接口播放音频,不依赖第三方库
7 课程将设计模式应用到实践-观察者、构建者、门面、代理、适配器、单件、和多线程的生产者消费者模式
第1章课程介绍及音视频基础知识(1小时26分钟6节)
1-1课程介绍[18:06]
1-2音视频基础知识Mpeg4封装格式音视频编码格式讲解[10:15]
1-3音视频解封装和解码原理分析[18:01]
1-4图形像素格式RGB和YUV格式分析[15:36]
1-5PCM音频采样率_通道_planar等格式参数分析[08:37]
1-6MP4标准和h264格式的NAL的GOP分析[15:53]
第2章AndroidStudio开发工具和开发环境准备(42分钟5节)
2-1开发所用到的工具和sdk介绍[07:29]
2-2AndroidStudio开发工具安装使用讲解[09:22]
2-3Android SDK目录内容分析[04:59]
2-4AndroidNDK工具目录功能分析[05:43]
2-5安卓模拟器安装和第一个c++安卓程序编译运行[15:22]
第3章Android NDK交叉编译FFMpeg并添加测试AS项目(2小时39分钟10节)
3-1安卓NDK相关概念ABI、NEON、JNI和CMAKE分析[12:32]
3-2NDK中CPU的应用二进制界面ABI[09:00]
3-3ubuntu虚拟机及常用工具安装并配置samba共享目录[19:10]
3-4ffmpeg源码下载在android下的编译参数分析讲解[12:46]
3-5在ubuntu下交叉编译ffmpeg的android版本库[20:28]
3-6ffmpeg通用编译bash脚本编写、硬解码、neon、多线[24:19]
3-7AndroidStudio项目配置权限、jni库路径、ABI[07:56]
3-8cmake配置(导入库、头文件、链接)分析[10:44]
3-9创建支持ffmpeg的AndroidStudio项目并调用[24:19]
3-10JNI和c传递文件路径并设置app的读写权限[17:51]
第4章 FFmpeg解封装(C++ NDK) (2小时 12节)
4-1ffmpeg SDK软硬解码流程说明[05:08]
4-2ffmpeg音视频解封装用到的函数和结构体详解[10:11]
4-3avformat_open_input函数详解并示例[17:54]
4-4AVFormatContext结构分析和清理代码示例[08:23]
4-5avformat_find_stream_info探[09:04]
4-6AVStream和AVCodecParameters[13:16]
4-7通过遍历获取AVStream音视频流信息并打印参数[16:08]
4-8通过av_find_best_stream获取音视频[04:23]
4-9av_read_frame读取帧数据函数分析和产生的[07:06]
4-10AVPacket结构解析空间申请-初始化-复制-引用[10:27]
4-11av_seek_frame改变播放进度函数详解[08:37]
4-12av_read_frame和av_seek_fram[10:03]
第5章 FFmpeg软硬解和多线程解码(C++ NDK) (1小时9分钟 7节)
5-1AVCodecContext解码上下文初始化讲解和视[19:32]
5-2打开音频解码器上下文[05:14]
5-3AVFrame格式解析和空间处理函数[09:37]
5-4avcodec_send_packet和receiv[07:22]
5-5音视频多线程解码代码演示[09:06]
5-6音视频解码性能测试neon单线程和八线程解码测试代码[13:56]
5-7ffmpeg调用MediaCodec实现硬解码代码演[04:55]
第6章 FFMpeg音频重采样和视频格式转换和显示 (1小时29分钟 7节)
6-1sws_getContext和sws_scale像素[12:43]
6-2sws_scale像素格式转换代码演示[15:45]
6-3音频重采样SwrContext格式和swr_conv[05:17]
6-4swr_init音频重采样上下文初始化和swr_co[17:08]
6-5分析GLSurfaceView和NDK接口直接显示R[09:34]
6-6使用NDK通过GLSurfaceView双缓冲空间复[22:31]
6-7安卓视频播放窗口去掉标题栏、全屏、横屏[06:42]
第7章 OpenSLES音频播放 (1小时6分钟 5节)
7-1OpenSLES播放音频步骤和接口讲解[19:34]
7-2创建OpenSLES音频播放测试项目并完成引擎初始化[12:16]
7-3完成OpenSLES混音器CreateOutputM[06:11]
7-4配置OpenSL的PCM音频输入格式[04:39]
7-5读取pcm音频文件并使用OpenSL播放[23:41]
第8章 EGL和OpenGLES Shader显示YUV视频 (2小时18分钟 11节)
8-1egl和opengl_shader_glsl讲解[13:55]
8-2testopengles_shader项目配置和创建[11:47]
8-3NDKC++完成EGL、display、surfac[20:21]
8-4Opengl ES Shader顶点坐标和材质坐标分[10:52]
8-5顶点着色器代码glsl代码编写[07:01]
8-6yuv420p片元着色器glsl编写[14:22]
8-7shader初始化完成并编译顶点和片元着色器代码[11:40]
8-8program渲染程序初始化给shader传递顶点和[16:05]
8-9opengl的yuv纹理的创建和初始化[18:06]
8-10OpenglES纹理数据修改和显示[09:16]
8-11通过OpenglES纹理修改完成yuv文件的播放显示[05:22]
第9章 视频播放器项目实战一 需求和设计模式 (1小时 6节)
9-1视频播放器项目设计说明和UML类图知识讲解[13:28]
9-2模块分解和用到的7个设计模式讲解[13:31]
9-3适配器、建造者、代理模式讲解[14:16]
9-4门面模式&生产者消费者模式[07:11]
9-5Observer观察者模式讲解和应用[05:18]
9-6解码显示帧数据处理顺序图和开发计划讲解[07:09]
第10章 视频播放器项目实战二 音视频解码解封装 (2小时49分钟 14节)
10-1项目创建权限ABI和CMake相关库和头文件配置[09:17]
10-2创建安卓流媒体播放器XPlay项目并配置添加了解封装[14:29]
10-3FFDemux的Open实现打开媒体文件[16:26]
10-4FFdemux的Read读取帧数据接口编写[11:21]
10-5完成XThread线程类IDemux继承后在线程中读[13:57]
10-6添加了XSleep完成XThread线程函数的停止和[09:53]
10-7观察者Observer模式的代码实现并使用IDemu[14:11]
10-8IDecode和FFDecode模块代码创建[09:58]
10-9FFDecode的Open打开解码器接口编写Obse[10:07]
10-10添加IDemux的GetVPara获取视频XPara[05:55]
10-11封装FFDecode解码的Send和Recv接口[14:02]
10-12读取媒体帧数据获取类型信息(音频、视频)存入XDat[08:13]
10-13完成音视频解码和并重构解码器加入观察者模式[12:13]
10-14加入生产者消费者模式控制音视频缓冲[19:14]
第11章 视频播放器项目实战三 音视频播放 (3小时35分钟 12节)
11-1IVideoView显示模块架构讲解和代码创建[16:27]
11-2IEGL类初始化封装java部分添加XPlay窗口类[19:28]
11-3XShader基于yuv420p的初始化Init代码[13:46]
11-4XTexture初始化并完成GLVideoView的[14:06]
11-5GLVideoView完成使用shader显示视频[27:49]
11-6完成音频重采样IResample模块初始化代码[09:40]
11-7完成音频重采样IResample模块的处理功能[22:23]
11-8完成了IAudioPlay和SLAudioPlay的[32:09]
11-9IAudioPlay的Update将音频压入缓冲队列[09:44]
11-10SLAudioPlay音频播放完成并测试对MP4文件[09:54]
11-11完成硬解码并完成NV21和NV12格式的shader[35:32]
11-12解决android8.0下opengles不能播放的[04:32]
第12章 频播放器项目实战四 完成架构解决同步和seek (4小时43分钟 22节)
12-1完成facade模式的IPlayer并实现Open接[26:26]
12-2完成Iplayer开始播放和窗口初始化接口[08:30]
12-3完成Builder模式的IPlayerBuilder[26:38]
12-4完成IPlayerProxy代理模式并进行测试架构搭[12:19]
12-5统一换算pts为毫秒使用IPlayer完成音视频同步[25:41]
12-6IDemux&FFdemux线程安全和Close清理[07:00]
12-7FFdecode和FFResample线程安全处理C[10:44]
12-8SLAudioPlay的线程安全处理和Close清理[11:25]
12-9XEGL的线程安全处理和Close清理函数编写[06:47]
12-10XShader线程安全处理和Close清理函数编写[08:01]
12-11XTexture和GLVideoView的线程安全和[07:57]
12-12IPlayer完成Close清理函数编写并完成多次打[17:03]
12-13添加打开视频按钮和进度滑动条并响应打开事件[08:32]
12-14添加视频打开路径和香港卫视rtmp打开路径的界面[05:30]
12-15完成通过界面多次打开视频文件,修正了多次打开显示出现[12:23]
12-16在835cpu的手机中测试并修正了音频播放Close[09:48]
12-17完成了播放进度的显示并修正了硬解码参数传递错误[16:43]
12-18滑动条拖动Seek视频开发策略详细分析[07:08]
12-19完成了IDemux的Seek和界面SeekBar的事[14:32]
12-20添加了视频播放的暂停和恢复[16:29]
12-21修改了视频播放到结尾再次打开会锁死的bug[08:30]
12-22通过手动解码帧数据完成了IPlayer控制视频播放进

评论(0)