基於NDK、C++、FFmpeg的android視訊播放器開發實戰-夏曹俊-專題視訊課程
阿新 • • 發佈:2018-11-08
基於NDK、C++、FFmpeg的android視訊播放器開發實戰—1796人已學習
課程介紹
課程包含了對流媒體(拉流)的播放,演示了播放rtmp的香港衛視,支援rtsp攝像頭和http網路視訊的播放,支援訪問本地的視訊檔案,並精確顯示和控制播放進度: 1講解如何編譯Android平臺的ffmpeg庫,使其支援neon技術和硬解碼,並測試效能 2使用opengles的NDK shader高效播放yuv視訊,不耗費cpu效能更優(GPU) 3程式碼支援硬解碼(省電不耗cpu)和多執行緒解碼(高效能每秒解碼240幀1080p) 4支援網路流媒體(rtmp,rtsp,http)可直接拉流播放電視並支援rtsp攝像頭訪問 5課程將設計模式應用到實踐 - 觀察者,構建者,門面,代理,介面卡,單件模式
課程收益
1 課程由淺入深,原理講解+程式碼實操演示,並提供全部課程原始碼 2 講解如何編譯Android平臺的ffmpeg庫,使其支援neon和硬解碼,並測試效能 3 使用opengles的NDK shader高效播放yuv視訊,不耗費cpu效能更優
講師介紹
夏曹俊 更多講師課程
夏曹俊:南京捷帝科技有限公司創始人,南京大學計算機碩士畢業,有15年c++跨平臺專案研發的經驗,領導開發過大量的c++虛擬模擬,計算機視覺,嵌入式影象處理,雲安全審計專案,比賽鷹眼系統,主編出版過《C++實訓教程》,並同時熟悉php,c#,java,安卓專案研發。
課程大綱
第1章:課程介紹及音視訊基礎知識
1. 課程介紹(由於平臺附件大小限制,請購買課程後加群 23304930下載全部原始碼) 18:06
2. 音視訊基礎知識Mpeg4封裝格式音視訊編碼格式講解 10:15
3. 音視訊解封裝和解碼原理分析 18:02
4. 圖形畫素格式RGB和YUV格式分析 15:36
5. PCM音訊取樣率_通道_planar等格式引數分析 8:37
6. MP4標準和h264格式的NAL的GOP分析(下載課件是ppt) 15:53
第2章:AndroidStudio開發工具和開發環境準備
1. 開發所用到的工具和sdk介紹 7:29
2. AndroidStudio開發工具安裝使用講解 9:22
3. Android SDK目錄內容分析 4:59
4. AndroidNDK工具目錄功能分析 5:43
5. 安卓模擬器安裝和第一個c++安卓程式編譯執行 8:41
第3章:Android NDK交叉編譯FFMpeg並新增測試AS專案
1. 安卓NDK相關概念ABI、NEON、JNI和CMAKE分析 12:32
2. NDK中CPU的應用二進位制介面ABI 9:00
3. ubuntu虛擬機器及常用工具安裝並配置samba共享目錄 19:10
4. ffmpeg原始碼下載在android下的編譯引數分析講解 12:47
5. 在ubuntu下交叉編譯ffmpeg的android版本庫 20:28
6. ffmpeg通用編譯bash指令碼編寫、硬解碼、neon、多執行緒解碼效能對比 24:19
7. AndroidStudio專案配置許可權、jni庫路徑、ABI和CMake引數和講解 7:56
8. cmake配置(匯入庫、標頭檔案、連結)分析 10:44
9. 建立支援ffmpeg的AndroidStudio專案並呼叫其介面在介面顯示庫配置資訊 24:19
10. JNI和c傳遞檔案路徑並設定app的讀寫許可權 17:51
第4章:FFmpeg解封裝(C++ NDK)
1. ffmpeg SDK軟硬解碼流程說明 5:08
2. ffmpeg音視訊解封裝用到的函式和結構體詳解 10:11
3. avformat_open_input函式詳解並示例開啟mp4檔案 17:54
4. AVFormatContext結構分析和清理程式碼示例 8:23
5. avformat_find_stream_info探測獲取封裝上下文的格式資訊 9:04
6. AVStream和AVCodecParameters分析 13:16
7. 通過遍歷獲取AVStream音視訊流資訊並列印引數 16:08
8. 通過av_find_best_stream獲取音視訊流索引 4:23
9. av_read_frame讀取幀資料函式分析和產生的空間問題分析 7:07
10. AVPacket結構解析空間申請-初始化-複製-引用計數函式講解 10:27
11. av_seek_frame改變播放進度函式詳解 8:37
12. av_read_frame和av_seek_frame程式碼示例並分析記憶體佔用和清理情況 10:04
第5章:FFmpeg軟硬解和多執行緒解碼(C++ NDK)
1. AVCodecContext解碼上下文初始化講解和視訊解碼器開啟的程式碼演示 19:32
2. 開啟音訊解碼器上下文 5:14
3. AVFrame格式解析和空間處理函式 9:37
4. avcodec_send_packet和avcodec_receive_frame函式講解 7:22
5. 音視訊多執行緒解碼程式碼演示 9:06
6. 音視訊解碼效能測試neon單執行緒和八執行緒解碼測試程式碼 13:56
7. ffmpeg呼叫MediaCodec實現硬解碼程式碼演示 4:55
第6章:FFMpeg音訊重取樣和視訊格式轉換和顯示
1. sws_getContext和sws_scale畫素格式和尺寸轉換函式講解 12:43
2. sws_scale畫素格式轉換程式碼演示 15:45
3. 音訊重取樣SwrContext格式和swr_convert相關函式詳解 5:17
4. swr_init音訊重取樣上下文初始化和swr_convert音訊重取樣程式碼示例 17:08
5. 分析GLSurfaceView和NDK介面直接顯示RGB視訊資料相關函式 9:34
6. 使用NDK通過GLSurfaceView雙緩衝空間複製完成視訊的播放 22:31
7. 安卓視訊播放視窗去掉標題欄、全屏、橫屏 6:42
第7章:OpenSLES音訊播放
1. OpenSLES播放音訊步驟和介面講解 19:34
2. 建立OpenSLES音訊播放測試專案並完成引擎初始化 12:16
3. 完成OpenSLES混音器CreateOutputMix初始化 6:11
4. 配置OpenSL的PCM音訊輸入格式 4:39
5. 讀取pcm音訊檔案並使用OpenSL播放 23:41
第8章:EGL和OpenGLES Shader顯示YUV視訊
1. egl和opengl_shader_glsl講解 13:55
2. testopengles_shader專案配置和建立_完成java部分程式碼 11:48
3. 使用NDKC++完成EGL、display、surface、contex配置和初始化 20:21
4. Opengl ES Shader頂點座標和材質座標分析 10:52
5. 頂點著色器程式碼glsl程式碼編寫 7:01
6. yuv420p片元著色器glsl編寫 14:22
7. shader初始化完成並編譯頂點和片元著色器程式碼 11:40
8. program渲染程式初始化給shader傳遞頂點和材質頂點資料 16:05
9. opengl的yuv紋理的建立和初始化 18:06
10. OpenglES紋理資料修改和顯示 9:16
11. 通過OpenglES紋理修改完成yuv檔案的播放顯示 5:22
第9章:視訊播放器專案實戰一 需求和設計模式
1. 視訊播放器專案設計說明和UML類圖知識講解 13:28
2. 模組分解和用到的7個設計模式講解 13:31
3. 介面卡、建造者、代理模式講解 14:16
4. 門面模式&生產者消費者模式 7:12
5. Observer觀察者模式講解和應用 5:18
6. 解碼顯示幀資料處理順序圖和開發計劃講解 7:09
第10章:視訊播放器專案實戰二 音視訊解碼解封裝
1. 專案建立許可權ABI和CMake相關庫和標頭檔案配置 9:18
2. 建立安卓流媒體播放器XPlay專案並配置添加了解封裝模組程式碼及其依賴日誌類 14:29
3. FFDemux的Open實現開啟媒體檔案 16:27
4. FFdemux的Read讀取幀資料介面編寫 11:21
5. 完成XThread執行緒類IDemux繼承後線上程中讀取幀資料 13:57
6. 添加了XSleep完成XThread執行緒函式的停止和超時判斷 9:53
7. 觀察者Observer模式的程式碼實現並使用IDemux進行測試 14:11
8. IDecode和FFDecode模組程式碼建立 9:58
9. FFDecode的Open開啟解碼器介面編寫和Observer基類新增 10:07
10. 新增IDemux的GetVPara獲取視訊XParamter引數介面用IDecode的Open測試 5:55
11. 封裝FFDecode解碼的Send和Recv介面 14:02
12. 讀取媒體幀資料獲取型別資訊(音訊、視訊)存入XData 8:13
13. 完成音視訊解碼和並重構解碼器加入觀察者模式 12:13
14. 加入生產者消費者模式控制音視訊緩衝 19:14
第11章:視訊播放器專案實戰三 音視訊播放
1. IVideoView顯示模組架構講解和程式碼建立 16:27
2. IEGL類初始化封裝java部分新增XPlay視窗類 19:29
3. XShader基於yuv420p的初始化Init程式碼完成並測試 13:46
4. XTexture初始化並完成GLVideoView的呼叫 14:06
5. GLVideoView完成使用shader顯示視訊 27:49
6. 完成音訊重取樣IResample模組初始化程式碼 9:40
7. 完成音訊重取樣IResample模組的處理功能 22:23
8. 完成了IAudioPlay和SLAudioPlay的音訊播放環境初始化 32:09
9. IAudioPlay的Update將音訊壓入緩衝佇列並測試 9:44
10. SLAudioPlay音訊播放完成並測試對MP4檔案音視訊播放 9:54
11. 完成硬解碼並完成NV21和NV12格式的shader顯示編寫 35:39
12. 解決android8.0下opengles不能播放的問題和音訊播放的迴音問題 4:32
第12章:頻播放器專案實戰四 完成架構解決同步和seek
1. 完成facade模式的IPlayer並實現Open介面 26:26
2. 完成Iplayer開始播放和視窗初始化介面 8:30
3. 完成Builder模式的IPlayerBuilder構建IPlayer物件 26:39
4. 完成IPlayerProxy代理模式並進行測試架構搭建完成 12:19
5. 統一換算pts為毫秒使用IPlayer完成音視訊同步播放 25:41
6. IDemux&FFdemux;執行緒安全和Close清理函式編寫 7:00
7. FFdecode和FFResample執行緒安全處理和Close清理函式編寫 10:44
8. SLAudioPlay的執行緒安全處理和Close清理函式編寫 11:25
9. XEGL的執行緒安全處理和Close清理函式編寫 6:47
10. XShader執行緒安全處理和Close清理函式編寫 8:01
11. XTexture和GLVideoView的執行緒安全和清理函式編寫 7:57
12. IPlayer完成Close清理函式編寫並完成多次開啟視訊檔案的測試 17:03
13. 新增開啟視訊按鈕和進度滑動條並響應開啟事件 8:32
14. 新增視訊開啟路徑和香港衛視rtmp開啟路徑的介面 5:30
15. 完成通過介面多次開啟視訊檔案,修正了多次開啟顯示出現的bug 12:23
16. 在835cpu的手機中測試並修正了音訊播放Close的bug 9:48
17. 完成了播放進度的顯示並修正了硬解碼引數傳遞錯誤 16:43
18. 滑動條拖動Seek視訊開發策略詳細分析 7:09
19. 完成了IDemux的Seek和介面SeekBar的事件響應 14:32
20. 添加了視訊播放的暫停和恢復 16:29
21. 修改了視訊播放到結尾再次開啟會鎖死的bug 8:30
22. 通過手動解碼幀資料完成了IPlayer控制視訊播放進度的功能 15:32
大家可以點選【 檢視詳情】檢視我的課程
課程介紹
課程包含了對流媒體(拉流)的播放,演示了播放rtmp的香港衛視,支援rtsp攝像頭和http網路視訊的播放,支援訪問本地的視訊檔案,並精確顯示和控制播放進度: 1講解如何編譯Android平臺的ffmpeg庫,使其支援neon技術和硬解碼,並測試效能 2使用opengles的NDK shader高效播放yuv視訊,不耗費cpu效能更優(GPU) 3程式碼支援硬解碼(省電不耗cpu)和多執行緒解碼(高效能每秒解碼240幀1080p) 4支援網路流媒體(rtmp,rtsp,http)可直接拉流播放電視並支援rtsp攝像頭訪問 5課程將設計模式應用到實踐 - 觀察者,構建者,門面,代理,介面卡,單件模式
課程收益
1 課程由淺入深,原理講解+程式碼實操演示,並提供全部課程原始碼 2 講解如何編譯Android平臺的ffmpeg庫,使其支援neon和硬解碼,並測試效能 3 使用opengles的NDK shader高效播放yuv視訊,不耗費cpu效能更優
講師介紹
夏曹俊 更多講師課程
夏曹俊:南京捷帝科技有限公司創始人,南京大學計算機碩士畢業,有15年c++跨平臺專案研發的經驗,領導開發過大量的c++虛擬模擬,計算機視覺,嵌入式影象處理,雲安全審計專案,比賽鷹眼系統,主編出版過《C++實訓教程》,並同時熟悉php,c#,java,安卓專案研發。
課程大綱
第1章:課程介紹及音視訊基礎知識
1. 課程介紹(由於平臺附件大小限制,請購買課程後加群 23304930下載全部原始碼) 18:06
2. 音視訊基礎知識Mpeg4封裝格式音視訊編碼格式講解 10:15
3. 音視訊解封裝和解碼原理分析 18:02
4. 圖形畫素格式RGB和YUV格式分析 15:36
5.
6. MP4標準和h264格式的NAL的GOP分析(下載課件是ppt) 15:53
第2章:AndroidStudio開發工具和開發環境準備
1. 開發所用到的工具和sdk介紹 7:29
2. AndroidStudio開發工具安裝使用講解 9:22
3. Android SDK目錄內容分析 4:59
4. AndroidNDK工具目錄功能分析 5:43
5. 安卓模擬器安裝和第一個c++安卓程式編譯執行 8:41
第3章:Android NDK交叉編譯FFMpeg並新增測試AS專案
1. 安卓NDK相關概念ABI、NEON、JNI和CMAKE分析 12:32
2. NDK中CPU的應用二進位制介面ABI 9:00
3. ubuntu虛擬機器及常用工具安裝並配置samba共享目錄 19:10
4. ffmpeg原始碼下載在android下的編譯引數分析講解 12:47
5. 在ubuntu下交叉編譯ffmpeg的android版本庫 20:28
6. ffmpeg通用編譯bash指令碼編寫、硬解碼、neon、多執行緒解碼效能對比 24:19
7. AndroidStudio專案配置許可權、jni庫路徑、ABI和CMake引數和講解 7:56
8. cmake配置(匯入庫、標頭檔案、連結)分析 10:44
9. 建立支援ffmpeg的AndroidStudio專案並呼叫其介面在介面顯示庫配置資訊 24:19
10. JNI和c傳遞檔案路徑並設定app的讀寫許可權 17:51
第4章:FFmpeg解封裝(C++ NDK)
1. ffmpeg SDK軟硬解碼流程說明 5:08
2. ffmpeg音視訊解封裝用到的函式和結構體詳解 10:11
3. avformat_open_input函式詳解並示例開啟mp4檔案 17:54
4. AVFormatContext結構分析和清理程式碼示例 8:23
5. avformat_find_stream_info探測獲取封裝上下文的格式資訊 9:04
6. AVStream和AVCodecParameters分析 13:16
7. 通過遍歷獲取AVStream音視訊流資訊並列印引數 16:08
8. 通過av_find_best_stream獲取音視訊流索引 4:23
9. av_read_frame讀取幀資料函式分析和產生的空間問題分析 7:07
10. AVPacket結構解析空間申請-初始化-複製-引用計數函式講解 10:27
11. av_seek_frame改變播放進度函式詳解 8:37
12. av_read_frame和av_seek_frame程式碼示例並分析記憶體佔用和清理情況 10:04
第5章:FFmpeg軟硬解和多執行緒解碼(C++ NDK)
1. AVCodecContext解碼上下文初始化講解和視訊解碼器開啟的程式碼演示 19:32
2. 開啟音訊解碼器上下文 5:14
3. AVFrame格式解析和空間處理函式 9:37
4. avcodec_send_packet和avcodec_receive_frame函式講解 7:22
5. 音視訊多執行緒解碼程式碼演示 9:06
6. 音視訊解碼效能測試neon單執行緒和八執行緒解碼測試程式碼 13:56
7. ffmpeg呼叫MediaCodec實現硬解碼程式碼演示 4:55
第6章:FFMpeg音訊重取樣和視訊格式轉換和顯示
1. sws_getContext和sws_scale畫素格式和尺寸轉換函式講解 12:43
2. sws_scale畫素格式轉換程式碼演示 15:45
3. 音訊重取樣SwrContext格式和swr_convert相關函式詳解 5:17
4. swr_init音訊重取樣上下文初始化和swr_convert音訊重取樣程式碼示例 17:08
5. 分析GLSurfaceView和NDK介面直接顯示RGB視訊資料相關函式 9:34
6. 使用NDK通過GLSurfaceView雙緩衝空間複製完成視訊的播放 22:31
7. 安卓視訊播放視窗去掉標題欄、全屏、橫屏 6:42
第7章:OpenSLES音訊播放
1. OpenSLES播放音訊步驟和介面講解 19:34
2. 建立OpenSLES音訊播放測試專案並完成引擎初始化 12:16
3. 完成OpenSLES混音器CreateOutputMix初始化 6:11
4. 配置OpenSL的PCM音訊輸入格式 4:39
5. 讀取pcm音訊檔案並使用OpenSL播放 23:41
第8章:EGL和OpenGLES Shader顯示YUV視訊
1. egl和opengl_shader_glsl講解 13:55
2. testopengles_shader專案配置和建立_完成java部分程式碼 11:48
3. 使用NDKC++完成EGL、display、surface、contex配置和初始化 20:21
4. Opengl ES Shader頂點座標和材質座標分析 10:52
5. 頂點著色器程式碼glsl程式碼編寫 7:01
6. yuv420p片元著色器glsl編寫 14:22
7. shader初始化完成並編譯頂點和片元著色器程式碼 11:40
8. program渲染程式初始化給shader傳遞頂點和材質頂點資料 16:05
9. opengl的yuv紋理的建立和初始化 18:06
10. OpenglES紋理資料修改和顯示 9:16
11. 通過OpenglES紋理修改完成yuv檔案的播放顯示 5:22
第9章:視訊播放器專案實戰一 需求和設計模式
1. 視訊播放器專案設計說明和UML類圖知識講解 13:28
2. 模組分解和用到的7個設計模式講解 13:31
3. 介面卡、建造者、代理模式講解 14:16
4. 門面模式&生產者消費者模式 7:12
5. Observer觀察者模式講解和應用 5:18
6. 解碼顯示幀資料處理順序圖和開發計劃講解 7:09
第10章:視訊播放器專案實戰二 音視訊解碼解封裝
1. 專案建立許可權ABI和CMake相關庫和標頭檔案配置 9:18
2. 建立安卓流媒體播放器XPlay專案並配置添加了解封裝模組程式碼及其依賴日誌類 14:29
3. FFDemux的Open實現開啟媒體檔案 16:27
4. FFdemux的Read讀取幀資料介面編寫 11:21
5. 完成XThread執行緒類IDemux繼承後線上程中讀取幀資料 13:57
6. 添加了XSleep完成XThread執行緒函式的停止和超時判斷 9:53
7. 觀察者Observer模式的程式碼實現並使用IDemux進行測試 14:11
8. IDecode和FFDecode模組程式碼建立 9:58
9. FFDecode的Open開啟解碼器介面編寫和Observer基類新增 10:07
10. 新增IDemux的GetVPara獲取視訊XParamter引數介面用IDecode的Open測試 5:55
11. 封裝FFDecode解碼的Send和Recv介面 14:02
12. 讀取媒體幀資料獲取型別資訊(音訊、視訊)存入XData 8:13
13. 完成音視訊解碼和並重構解碼器加入觀察者模式 12:13
14. 加入生產者消費者模式控制音視訊緩衝 19:14
第11章:視訊播放器專案實戰三 音視訊播放
1. IVideoView顯示模組架構講解和程式碼建立 16:27
2. IEGL類初始化封裝java部分新增XPlay視窗類 19:29
3. XShader基於yuv420p的初始化Init程式碼完成並測試 13:46
4. XTexture初始化並完成GLVideoView的呼叫 14:06
5. GLVideoView完成使用shader顯示視訊 27:49
6. 完成音訊重取樣IResample模組初始化程式碼 9:40
7. 完成音訊重取樣IResample模組的處理功能 22:23
8. 完成了IAudioPlay和SLAudioPlay的音訊播放環境初始化 32:09
9. IAudioPlay的Update將音訊壓入緩衝佇列並測試 9:44
10. SLAudioPlay音訊播放完成並測試對MP4檔案音視訊播放 9:54
11. 完成硬解碼並完成NV21和NV12格式的shader顯示編寫 35:39
12. 解決android8.0下opengles不能播放的問題和音訊播放的迴音問題 4:32
第12章:頻播放器專案實戰四 完成架構解決同步和seek
1. 完成facade模式的IPlayer並實現Open介面 26:26
2. 完成Iplayer開始播放和視窗初始化介面 8:30
3. 完成Builder模式的IPlayerBuilder構建IPlayer物件 26:39
4. 完成IPlayerProxy代理模式並進行測試架構搭建完成 12:19
5. 統一換算pts為毫秒使用IPlayer完成音視訊同步播放 25:41
6. IDemux&FFdemux;執行緒安全和Close清理函式編寫 7:00
7. FFdecode和FFResample執行緒安全處理和Close清理函式編寫 10:44
8. SLAudioPlay的執行緒安全處理和Close清理函式編寫 11:25
9. XEGL的執行緒安全處理和Close清理函式編寫 6:47
10. XShader執行緒安全處理和Close清理函式編寫 8:01
11. XTexture和GLVideoView的執行緒安全和清理函式編寫 7:57
12. IPlayer完成Close清理函式編寫並完成多次開啟視訊檔案的測試 17:03
13. 新增開啟視訊按鈕和進度滑動條並響應開啟事件 8:32
14. 新增視訊開啟路徑和香港衛視rtmp開啟路徑的介面 5:30
15. 完成通過介面多次開啟視訊檔案,修正了多次開啟顯示出現的bug 12:23
16. 在835cpu的手機中測試並修正了音訊播放Close的bug 9:48
17. 完成了播放進度的顯示並修正了硬解碼引數傳遞錯誤 16:43
18. 滑動條拖動Seek視訊開發策略詳細分析 7:09
19. 完成了IDemux的Seek和介面SeekBar的事件響應 14:32
20. 添加了視訊播放的暫停和恢復 16:29
21. 修改了視訊播放到結尾再次開啟會鎖死的bug 8:30
22. 通過手動解碼幀資料完成了IPlayer控制視訊播放進度的功能 15:32
大家可以點選【 檢視詳情】檢視我的課程