音视频常见播放器框架分析
音視頻面試必問:如何設計一個播放器
1.常見播放器框架分析
 2.如何解決播放端延遲的問題
 3.音視頻如何做同步
 4.快進、快退、逐幀播放如何實現
音視頻開發技術精講《常見播放器框架分析》
播放器框架
SDL2播放音頻
使用SDL播放解碼后的音頻數據,SDL播放音頻數據的流程
 如下:
 
播放器-播放做了哪一些事情?
打開媒體文件
 分析媒體流成分
 查找相應的解碼器
 數據讀取線程-讀取數據包并放入包緩存隊列 av_read_frame
解碼線程-解碼數據包得到數據幀并放入幀緩存隊列
 audio_ thread 音頻解碼線程
 video_ thread視頻解碼
音頻回調接口-讀取音頻數據幀
 sdl_audio_callback
視頻刷新線程-以音頻為基準做同步顯示圖像
 video_refresh
播放器-靜音和音量控制的本質
音量控制的本質:控制采樣點的幅值
 靜音,將采樣點數值置為0
 音量+,提升采樣點的幅值
 音量-,降低采樣點的幅值
播放器-靜音和音量控制的本質
ffplay控制音量的方式
最大音量:輸出解碼后的原始數據
 靜音:即是輸出數值為0的數據 toggle_ mute( )
 改變音量:通過SDL_ MixAudio改變解碼后數據的幅值update_ volume()
 比如下圖所示(sdI audio_ callback函數內) :
以下是ffplay的方式供參考
 
播放器-快進快退
快進和快退的本質是seek到某個點重新開始播放。
- 跳轉到指定的數據位置avformat_ seek_ file
- 清空packet隊列
- 清空frame隊列(在ffplay里面是通過serial去控制)
- 清空解碼器
seek/快進/快退: stream_ seek()/ avformat_ seek_ file()
seek播放流程
- 左右箭頭產生seek事件;
- 將文件seek到指定時間點,清空packet隊列,刷新解碼器.
- 切換時鐘序列(ffplay)
注意:不同的容器(比如MP4和FLV) seek的機制是不一樣的。有些容器
 seek的時間會快些,有些則相對耗時。這個和容器的存儲結構有關系。
FFmpeg/WebRTC/RTMP/RTSP/HLS/RTP播放器-音視頻流媒體高級開發 學習資料、視頻教程
總結
以上是生活随笔為你收集整理的音视频常见播放器框架分析的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: LoadRunner中进程运行和线程运行
- 下一篇: MySQL 字符串分割 SUBSTRIN
