GPU视频解码之CUVID
解決思路:
????? 利用GPU解碼高清視頻,降低解碼所占用CPU資源,加速解碼過程。
一、OpenCV中的硬解碼
????? OpenCV2.4.6中,已實現利用GPU進行讀取視頻,由cv::gpu::VideoReader_GPU完成,其示例程序如下。
[cpp] view plain copy二、視頻解碼庫CUVID
???? CUVID是基于CUDA的視頻解碼庫,利用CUVID進行解碼,主要包括以下四個步驟:
1.解析視頻數據文件
2.在GPU端解碼
3.轉換解碼后的數據(YUV420、NV12 ---> RGBA)
4.將RGBA數據顯示出來
?????? 下圖為利用CUVID解碼的偽代碼示意圖,其中VideoSource用來解析視頻數據文件,VideoParser用來解碼數據。
???????VideoSource的回調函數HandleVideoData(),當VideoSource的狀態設置為Started時,開始解析視頻文件,并創建VideoParser,解碼數據。
VideoParser的回調函數:
HandleVideoSequence() 創建解碼器或重設解碼器
HandlePictureDecode() 解碼每幀視頻數據
HandlePictureDisplay() 轉換,處理,顯示解碼后的數據
OpenCV中VideoReader_GPU可以方便地利用GPU讀取視頻文件,加速解碼過程,但OpenCV中VideoReader_GPU無法讀取rtsp視頻流數據。
這是因為CUVID中CuvideoSource不支持rtsp視頻流數據,不能由rtsp地址創建VideoSource。
三、CUVID解碼rtsp視頻流
基本思路:跳過VideoSource模塊,利用其他方式解析視頻數據文件。
基本步驟:
1.利用FFmpeg解析rtsp視頻流
2.創建VideoParser
3.利用FFmpeg讀取數據包(AVpacket)
4.將數據包傳輸到VideoParser(AVpacket ---> CUVIDSOURCEDATAPACKET)
5.VideoParser解碼數據包
其示例偽代碼如下圖所示
http://www.cnblogs.com/dwdxdy/p/3244723.html 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的GPU视频解码之CUVID的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于C++14:你需要知道的新特性
- 下一篇: 虚函数、纯虚函数、虚函数与析构函数