正版资源【腾讯课堂】FFmpeg安卓流媒体播放器开发实战|完结无秘(含资料代码)
基于 NDK 与 C++ 构建高性能流媒体播放引擎 本资料包核心在于解决 Android 原生 MediaCodec 在处理复杂流媒体协议时的局限性问题。通过引入 FFmpeg 库并基于 NDK 进行 C++ 层开发,实现了对 RTMP 拉流、RTSP 摄像头流以及 HTTP 网络视频的全链路支持。
支付成功后自动发货,可在「我的订单」查看网盘链接;链接失效可联系客服免费补链。
基于 NDK 与 C++ 构建高性能流媒体播放引擎
本资料包核心在于解决 Android 原生 MediaCodec 在处理复杂流媒体协议时的局限性问题。通过引入 FFmpeg 库并基于 NDK 进行 C++ 层开发,实现了对 RTMP 拉流、RTSP 摄像头流以及 HTTP 网络视频的全链路支持。这种架构不再受限于系统解码器的硬解能力或协议支持广度,允许开发者在 C++ 层精确控制解复用(Demuxing)、解码(Decoding)和渲染(Rendering)的每一个环节。它不仅涵盖了本地文件的播放,更重点演示了如何编译适配 Android 平台的 FFmpeg 静态库,以及如何在 JNI 边界高效传输音视频数据。对于追求极致播放性能、需要兼容私有协议或特定硬件编解码器的应用场景,这套基于源码的工程实践具有极高的参考价值,适合直接作为底层播放器的参考实现进行研读。
从底层编译到上层交互的完整技术闭环
该工程适合具备一定 C++ 基础、熟悉 Android NDK 开发流程的中级以上移动开发者。初学者若缺乏 C++ 指针操作经验或 JNI 调用机制理解,建议先补齐 NDK 环境配置与 CMake 构建系统的基础知识,再进入本资料的深入实践。学习路径上,应优先聚焦于 FFmpeg 在 Android 交叉编译过程中的依赖项处理,这是构建可复用库的关键难点。随后重点分析流媒体数据接收与线程模型的对接逻辑,特别是拉流过程中的缓冲策略与同步机制。建议对照源码逐行阅读播放器核心模块,理解 AVPacket 与 AVFrame 之间的转换逻辑,以及音频视频硬软解切换的实现细节。切忌仅观看视频演示而不运行代码,必须亲手复现从源码编译到 APK 集成的全过程,才能掌握其中涉及的内存管理与异常处理技巧。
独立复刻与工程落地的实战延伸
学完本资料后,开发者应能独立完成一个支持多种网络协议、具备精细进度控制与帧级调试能力的定制化流媒体播放器。具体落地能力包括:能够针对特定硬件设备调整 FFmpeg 的解码参数以优化功耗与延迟;能设计基于 C++ 的插件式播放架构,支持动态加载不同格式的解码模块;以及具备排查流媒体卡顿、音画不同步等底层问题的能力。在资料配合练习方面,建议将提供的核心类封装为独立的 AAR 库,并在自己的业务工程中集成测试。重点练习替换不同的流媒体源地址,观察日志输出中关于协议解析与数据包的动态变化。通过修改渲染层代码,尝试接入 OpenGL ES 进行纹理处理,从而打通从数据解码到图形渲染的完整管线。这种由浅入深、原理讲解结合代码实操的方式,确保了知识从理论到工程转化的有效性,避免了纸上谈兵,让开发者在面对实际业务需求时,能快速搭建起稳健的音视频播放基础设施,而非单纯依赖第三方现成 SDK。
课程介绍
本课程来自T讯课堂,(完结版),Android影音(流媒体)播放器开发实战基于NDK、C++和FFmpeg。课程具有很强实战性的应用编程,课程由浅入深,原理讲解+代码实操演示,编译Android平台的ffmpeg库,包含了对流媒体(拉流)的播放,演示了播放rtmp的电视,支持rtsp摄像头和http网络视频的播放,支持访问本地的视频文件,并精确控制播放进度等等。
课程目录
课程目录181 集
- ├──1 课程介绍及音视频基础知识/【更多it资源 www.】
- │ ├── [ 52M] 1 课程介绍.mp4
- │ ├── [ 18M] 2 音视频基础知识Mpeg4封装格式音视频编码格式讲解.mp4
- │ ├── [ 26M] 3 音视频解封装和解码原理分析.mp4
- │ ├── [ 22M] 4 图形像素格式RGB和YUV格式分析.mp4
- │ ├── [ 14M] 5 PCM音频采样率 通道 planar等格式参数分析.mp4
- │ └── [ 24M] 6 MP4标准和h264格式的NAL的GOP分析.mp4
- ├──2 AndroidStudio开发工具和开发环境准备/
- │ ├── [ 10M] 1 开发所用到的工具和sdk介绍.mp4
- │ ├── [ 25M] 2 AndroidStudio开发工具安装使用讲解.mp4
- │ ├── [ 11M] 3 Android SDK目录内容分析.mp4
- │ ├── [9.1M] 4 AndroidNDK工具目录功能分析.mp4
- │ └── [ 48M] 5 安卓模拟器安装和第一个c++安卓程序编译运行.mp4
- ├──3 Android NDK交叉编译FFMpeg并添加测试AS项目/
- │ ├── [ 19M] 1 安卓NDK相关概念ABI NEON JNI和CMAKE分析.mp4
- │ ├── [ 35M] 10 JNI和c传递文件路径并设置app的读写权限.mp4
- │ ├── [ 14M] 2 NDK中CPU的应用二进制界面ABI.mp4
- │ ├── [ 37M] 3 ubuntu虚拟机及常用工具安装并配置samba共享目录.mp4
- │ ├── [ 21M] 4 ffmpeg源码下载在android下的编译参数分析讲解.mp4
- │ ├── [ 47M] 5 在ubuntu下交叉编译ffmpeg的android版本库.mp4
- │ ├── [ 55M] 6 ffmpeg通用编译bash脚本编写 硬解码 neon 多线.mp4
- │ ├── [ 13M] 7 AndroidStudio项目配置权限 jni库路径 ABI.mp4
- │ ├── [ 18M] 8 cmake配置(导入库 头文件 链接)分析.mp4
- │ └── [ 45M] 9 创建支持ffmpeg的AndroidStudio项目并调用.mp4
- ├──4 FFmpeg解封装(C++ NDK)/
- │ ├── [7.2M] 1 ffmpeg SDK软硬解码流程说明.mp4
- │ ├── [ 15M] 10 AVPacket结构解析空间申请 初始化 复制 引用计数函数.mp4
- │ ├── [ 12M] 11 av_seek_frame改变播放进度函数详解.mp4
- │ ├── [ 14M] 2 ffmpeg音视频解封装用到的函数和结构体详解.mp4
- │ ├── [ 37M] 3 avformat_open_input函数详解并示例打开mp.mp4
- │ ├── [ 14M] 4 AVFormatContext结构分析和清理代码示例.mp4
- │ ├── [ 32M] 7 通过遍历获取AVStream音视频流信息并打印参数.mp4
- │ ├── [7.9M] 8 通过av_find_best_stream获取音视频流索引.mp4
- │ └── [9.5M] 9 av_read_frame读取帧数据函数分析和产生的空间问题.mp4
- ├──5 FFmpeg软硬解和多线程解码(C++ NDK)/
- │ ├── [ 34M] 1 AVCodecContext解码上下文初始化讲解和视频解码器.mp4
- │ ├── [ 12M] 2 打开音频解码器上下文【更多it资源 www.】.mp4
- │ ├── [ 14M] 3 AVFrame格式解析和空间处理函数.mp4
- │ ├── [ 18M] 5 音视频多线程解码代码演示.mp4
- │ ├── [ 27M] 6 音视频解码性能测试neon单线程和八线程解码测试代码.mp4
- │ └── [9.3M] 7 ffmpeg调用MediaCodec实现硬解码代码演示.mp4
- ├──6 FFMpeg音频重采样和视频格式转换和显示/
- │ ├── [ 33M] 2 sws_scale像素格式转换代码演示.mp4
- │ ├── [7.8M] 3 音频重采样SwrContext格式和swr_convert.mp4
- │ ├── [ 34M] 4 swr_init音频重采样上下文初始化和swr_conver.mp4
- │ ├── [ 15M] 5 分析GLSurfaceView和NDK接口直接显示RGB视频.mp4
- │ ├── [ 55M] 6 使用NDK通过GLSurfaceView双缓冲空间复制完成视.mp4
- │ └── [ 21M] 7 安卓视频播放窗口去掉标题栏 全屏 横屏.mp4
- ├──7 OpenSLES音频播放/
- │ ├── [ 30M] 1 OpenSLES播放音频步骤和接口讲解.mp4
- │ ├── [ 23M] 2 创建OpenSLES音频播放测试项目并完成引擎初始化.mp4
- │ ├── [ 11M] 3 完成OpenSLES混音器CreateOutputMix初始.mp4
- │ ├── [8.4M] 4 配置OpenSL的PCM音频输入格式.mp4
- │ └── [ 46M] 5 读取pcm音频文件并使用OpenSL播放.mp4
- ├──8 EGL和OpenGLES Shader显示YUV视频/
- │ ├── [ 20M] 1 egl和opengl_shader_glsl讲解.mp4
- │ ├── [ 18M] 10 OpenglES纹理数据修改和显示.mp4
- │ ├── [ 11M] 11 通过OpenglES纹理修改完成yuv文件的播放显示.mp4
- │ ├── [ 22M] 2 testopengles_shader项目配置和创建.mp4
- │ ├── [ 16M] 4 Opengl ES Shader顶点坐标和材质坐标分析.mp4
- │ ├── [ 12M] 5 顶点着色器代码glsl代码编写.mp4
- │ ├── [ 24M] 6 yuv420p片元着色器glsl编写.mp4
- │ ├── [ 22M] 7 shader初始化完成并编译顶点和片元着色器代码.mp4
- │ ├── [ 31M] 8 program渲染程序初始化给shader传递顶点和材质顶点.mp4
- │ └── [ 32M] 9 opengl的yuv纹理的创建和初始化.mp4
- ├──9 视频播放器项目实战-需求和设计模式/
- │ ├── [ 19M] 1 视频播放器项目设计说明和UML类图知识讲解.mp4
- │ ├── [ 19M] 2 模块分解和用到的7个设计模式讲解.mp4
- │ ├── [ 24M] 3 适配器 建造者 代理模式讲解.mp4
- │ ├── [ 11M] 4 门面模式 生产者消费者模式.mp4
- │ ├── [7.7M] 5 Observer观察者模式讲解和应用.mp4
- │ └── [ 12M] 6 解码显示帧数据处理顺序图和开发计划讲解.mp4
- ├──10 视频播放器项目实战-音视频解码解封装/
- │ ├── [ 18M] 1 项目创建权限ABI和CMake相关库和头文件配置.mp4
- │ ├── [ 11M] 10 添加IDemux的GetVPara获取视频XParamter.mp4
- │ ├── [ 25M] 11 封装FFDecode解码的Send和Recv接口.mp4
- │ ├── [ 15M] 12 读取媒体帧数据获取类型信息(音频 视频)存入XData.mp4
- │ ├── [ 21M] 13 完成音视频解码和并重构解码器加入观察者模式.mp4
- │ ├── [ 33M] 14 加入生产者消费者模式控制音视频缓冲.mp4
- │ ├── [ 26M] 2 创建安卓流媒体播放器XPlay项目并配置添加了解封装模块代码.mp4
- │ ├── [ 28M] 3 FFDemux的Open实现打开媒体文件.mp4
- │ ├── [ 20M] 4 FFdemux的Read读取帧数据接口编写.mp4
- │ ├── [ 24M] 5 完成XThread线程类IDemux继承后在线程中读取帧数据.mp4
- │ ├── [ 17M] 6 添加了XSleep完成XThread线程函数的停止和超时判断.mp4
- │ ├── [ 24M] 7 观察者Observer模式的代码实现并使用IDemux测试.mp4
- │ ├── [ 17M] 8 IDecode和FFDecode模块代码创建.mp4
- │ └── [ 18M] 9 FFDecode的Open打开解码器接口编写Observer.mp4
- ├──11 视频播放器项目实战-音视频播放/
- │ ├── [ 40M] 1 IVideoView显示模块架构讲解和代码创建.mp4
- │ ├── [ 24M] 10 SLAudioPlay音频播放完成并测试对MP4文件音视频播.mp4
- │ ├── [ 90M] 11 完成硬解码并完成NV21和NV12格式的shader显示编写.mp4
- │ ├── [ 12M] 12 解决android8.0下opengles不能播放的问题.mp4
- │ ├── [ 50M] 2 IEGL类初始化封装java部分添加XPlay窗口类.mp4
- │ ├── [ 37M] 3 XShader基于yuv420p的初始化Init代码完成并测.mp4
- │ ├── [ 30M] 4 XTexture初始化并完成GLVideoView的调用.mp4
- │ ├── [ 68M] 5 GLVideoView完成使用shader显示视频.mp4
- │ ├── [ 24M] 6 完成音频重采样IResample模块初始化代码.mp4
- │ ├── [ 55M] 7 完成音频重采样IResample模块的处理功能.mp4
- │ ├── [ 64M] 8 完成了IAudioPlay和SLAudioPlay的音频播放.mp4
- │ └── [ 25M] 9 IAudioPlay的Update将音频压入缓冲队列并测试.mp4
- ├──12 视频播放器项目实战-完成架构解决同步和seek/
- │ ├── [ 63M] 1 完成facade模式的IPlayer并实现Open接口.mp4
- │ ├── [ 23M] 10 XShader线程安全处理和Close清理函数编写.mp4
- │ ├── [ 21M] 11 XTexture和GLVideoView的线程安全和清理函数.mp4
- │ ├── [ 42M] 12 IPlayer完成Close清理函数编写并完成多次打开视频.mp4
- │ ├── [ 23M] 13 添加打开视频按钮和进度滑动条并响应打开事件.mp4
- │ ├── [ 15M] 14 添加视频打开路径和香港卫视rtmp打开路径的界面.mp4
- │ ├── [ 34M] 15 完成通过界面多次打开视频文件 修正了多次打开显示出现的bug.mp4
- │ ├── [ 27M] 16 在835cpu的手机中测试并修正了音频播放Close的bug.mp4
- │ ├── [ 41M] 17 完成了播放进度的显示并修正了硬解码参数传递错误.mp4
- │ ├── [ 13M] 18 滑动条拖动Seek视频开发策略详细分析.mp4
- │ ├── [ 38M] 19 完成了IDemux的Seek和界面SeekBar的事件响应.mp4
- │ ├── [ 22M] 2 完成Iplayer开始播放和窗口初始化接口.mp4
- │ ├── [ 41M] 20 添加了视频播放的暂停和恢复.mp4
- │ ├── [ 24M] 21 修改了视频播放到结尾再次打开会锁死的bug.mp4
- │ ├── [ 41M] 22 通过手动解码帧数据完成了IPlayer控制视频播放进度的功能.mp4
- │ ├── [ 67M] 3 完成Builder模式的IPlayerBuilder构建IP.mp4
- │ ├── [ 31M] 4 完成IPlayerProxy代理模式并进行测试架构搭建完成.mp4
- │ ├── [ 61M] 5 统一换算pts为毫秒使用IPlayer完成音视频同步播放.mp4
- │ ├── [ 18M] 6 IDemux&FFdemux线程安全和Close清理函数编写.mp4
- │ ├── [ 29M] 7 FFdecode和FFResample线程安全处理Close.mp4
- │ ├── [ 30M] 8 SLAudioPlay的线程安全处理和Close清理函数编写.mp4
- │ └── [ 18M] 9 XEGL的线程安全处理和Close清理函数编写.mp4
- └──资料代码/
- ├── [ 21M] 010第一个c++安卓程序testlog8-01.zip
- ├── [ 246] 011NDK下载地址-01.zip
- ├── [224K] 013ubuntu虚拟机及常用工具安装并配置samba共享目录-01.pdf
- ├── [ 872] 015ffmpeg3.4源码下载和安卓库编译编译指令-01.zip
- ├── [ 12M] 016ffmpeg通用编译bash脚本和编译好的ffmpeg安卓库-01.zip
- ├── [ 47M] 019创建支持ffmpeg的AndroidStudio项目完成设置显示ffmpeg的库配置信息tes-01.zip
- ├── [6.0M] 020testffmpeg_jni传递字符串参数并设置app读写权限16-01.zip
- ├── [ 72M] 023testffmpeg打开mp4文件19-01.zip
- ├── [ 49M] 027testffmpeg_通过遍历获取AVStream音视频流信息并打印参数-01.zip
- ├── [ 49M] 032testffmpeg_av_read_frame和av_seek_frame代码示例-01.zip
- ├── [ 49M] 033testffmpeg_AVCodecContext解码上下文初始化-01.zip
- ├── [ 49M] 034testffmpeg_打开音频解码器上下文-01.zip
- ├── [ 61M] 100XPlayIDemux&FFdemux线程安全和Close清理函数编写-01.zip
- ├── [ 62M] 101XPlayFFdecode和FFResample线程安全处理和Close清理函数编写-01.zip
- ├── [ 61M] 102XPlaySLAudioPlay的线程安全处理和Close清理函数编写-01.zip
- ├── [ 61M] 103XPlayXEGL的线程安全处理和Close清理函数编写-01.zip
- ├── [ 62M] 104XPlayXShader线程安全处理和Close清理函数编写-01.zip
- ├── [ 62M] 105XPlayXTexture和GLVideoView的线程安全和清理函数编写-01.zip
- ├── [ 63M] 106XPlayIPlayer完成Close清理函数编写并完成多次打开视频文件的测试-01.zip
- ├── [ 59M] 108XPlay添加视频打开路径和香港卫视rtmp打开路径的界面-01.zip
- ├── [ 60M] 109XPlay完成通过界面多次打开视频文件,修正了多次打开显示出现的bug-01.zip
- ├── [ 60M] 110XPlay在835cpu的手机中测试并修正了音频播放Close的bug-01.zip
- ├── [ 60M] 111XPlay成了播放进度的显示并修正了硬解码参数传递错误-01.zip
- ├── [ 60M] 113XPlay完成了IDemux的Seek和界面SeekBar的事件响应-01.zip
- ├── [ 60M] 114XPlay修改了视频播放到结尾再次打开会锁死的bug-01.zip
- ├── [ 60M] 115XPlay修改了视频播放到结尾再次打开会锁死的bug-01.zip
- ├── [ 60M] 116XPlay通过手动解码帧数据完成了IPlayer控制视频播放进度的功能-01.zip
- ├── [ 49M] 37testffmpeg_完成音视频解码-01.zip
- ├── [ 49M] 39testffmpeg_ffmpeg调用MediaCodec实现硬解码代码演示-01.zip
- ├── [ 49M] 41testffmpeg_37sws_scale像素格式转换代码演示-01.zip
- ├── [ 49M] 43testffmpeg_swr_init音频重采样上下文初始化和swr_convert音频重采样代-01.zip
- ├── [ 49M] 45testffmpeg使用NDK通过双缓冲空间复制完成视频的播放-01.zip
- ├── [ 49M] 46testffmpeg安卓视频播放窗口去掉标题栏、全屏、横屏-01.zip
- ├── [ 30M] 48TestOpenSL创建OpenSLES音频播放测试项目并完成引擎初始化-01.zip
- ├── [ 28M] 49TestOpenSL完成OpenSLES混音器CreateOutputMix初始化-01.zip
- ├── [ 28M] 50TestOpenSL配置OpenSL的PCM音频输入格式-01.zip
- ├── [ 28M] 51TestOpenSL读取pcm音频文件并使用OpenSL播放-01.zip
- ├── [ 16M] 56TestOpenglESshader初始化完成并编译顶点和片元着色器代码-01.zip
- ├── [ 16M] 57TestOpenglESshader初始化完成并编译顶点和片元着色器代码-01.zip
- ├── [ 16M] 58TestOpenglESshader初始化完成并编译顶点和片元着色器代码-01.zip
- ├── [ 16M] 59TestOpenglESprogram渲染程序初始化给shader传递顶点和材质顶点数据-01.zip
- ├── [ 16M] 60TestOpenglESopengl的yuv纹理的创建和初始化-01.zip
- ├── [ 16M] 61TestOpenglESopengl纹理数据修改和显示-01.zip
- ├── [ 16M] 62TestOpenglES通过opengl纹理修改完成yuv文件的播放显示-01.zip
- ├── [215K] 63UML类图箭头说明-01.zip
- ├── [301K] 64安卓视频播放器类图-01.zip
- ├── [175K] 68播放媒体文件的顺序图-01.zip
- ├── [ 59M] 70XPlay创建安卓流媒体播放器XPlay项目并配置添加了解封装模块代码及其依赖日志类-01.zip
- ├── [ 59M] 71XPlayFFDemux的Open实现打开媒体文件-01.zip
- ├── [ 59M] 72XPlayFFdemux的Read读取帧数据接口编写-01.zip
- ├── [ 59M] 73XPlay完成XThread线程类IDemux继承后在线程中读取帧数据-01.zip
- ├── [ 60M] 74XPlay添加了XSleep完成XThread线程函数的停止和超时判断-01.zip
- ├── [ 60M] 75XPlay观察者Observer模式的代码实现并使用IDemux进行测试-01.zip
- ├── [ 60M] 76XPlayIDecode和FFDecode模块代码创建-01.zip
- ├── [ 60M] 77XPlayFFDecode的Open打开解码器接口编写和Observer基类添加-01.zip
- ├── [ 60M] 78XPlay添加IDemux的GetVPara获取视频XParamter参数接口用IDecode的-01.zip
- ├── [ 60M] 79XPlay封装FFDecode解码的Send和Recv接口-01.zip
- ├── [ 60M] 82XPlay完成音视频解码和并重构解码器加入观察者模式,加入生产者消费者模式控制音视频缓冲-01.zip
- ├── [ 60M] 83XPlayIVideoView显示模块架构讲解和代码创建-01.zip
- ├── [ 60M] 84XPlayIEGL类初始化封装java部分添加XPlay窗口类-01.zip
- ├── [ 60M] 85XPlayXShader基于yuv420p的初始化Init代码完成并测试-01.zip
- ├── [ 60M] 86XPlayXTexture初始化并完成GLVideoView的调用-01.zip
- ├── [ 60M] 87XPlayGLViewView完成使用shader显示视频-01.zip
- ├── [ 60M] 88XPlay完成音频重采样IResample模块-01.zip
- ├── [ 60M] 90XPlay完成了IAudioPlay和SLAudioPlay的音频播放环境初始化-01.zip
- ├── [ 60M] 91XPlayIAudioPlay的Update将音频压入缓冲队列并测试-01.zip
- ├── [ 60M] 92XPlaySLAudioPlay音频播放完成并测试对MP4文件音视频播放-01.zip
- ├── [ 61M] 94XPlay解决android8.0下opengles不能播放的问题和音频播放的回音问题-01.zip
- ├── [ 61M] 95XPlay完成facade模式的IPlayer并实现Open接口-01.zip
- ├── [ 61M] 96XPlay完成Iplayer开始播放和窗口初始化接口-01.zip
- … 其余 4 项略,目录共 204 项




