预购商品
书目分类
特别推荐
上篇 基礎與參數詳解 第1章 多媒體基礎 2 1.1 從現實世界到數字世界 2 1.1.1 顏色和圖像 2 1.1.2 電影、電視和視頻 4 1.1.3 音訊 6 1.1.4 音視頻封裝、傳輸和 未來 10 1.2 視頻圖像圖元點的資料格式 10 1.2.1 圖像的位元深 10 1.2.2 FourCC 11 1.2.3 灰度模式表示 11 1.2.4 YUV色彩表示 11 1.2.5 RGB色彩表示 15 1.2.6 HSL與HSV色彩表示 18 1.3 視頻逐行和隔行掃描、NTSC與 PAL制式 19 1.3.1 逐行與隔行掃描 19 1.3.2 NTSC制式 20 1.3.3 PAL制式 21 1.4 幀率、PTS和DTS 22 1.5 圖像解析度與寬高比 22 1.6 圖像的色彩空間 23 1.7 音訊採樣資料格式 24 1.7.1 聲道 25 1.7.2 取樣速率 26 1.7.3 採樣位深 27 1.7.4 頻寬計算 28 1.8 小結 28 第2章 FFmpeg簡介 29 2.1 FFmpeg的發展歷史 29 2.2 FFmpeg的基本組成 31 2.2.1 封裝/解封裝模組 AVFormat 32 2.2.2 編/解碼模組AVCodec 32 2.2.3 濾鏡模組AVFilter 32 2.2.4 設備模組AVDevice 33 2.2.5 圖像轉換模組swscale 34 2.2.6 音訊轉換模組 swresample 34 2.2.7 編解碼工具ffmpeg 34 2.2.8 播放機ffplay 35 2.2.9 多媒體分析器ffprobe 35 2.3 不同平臺下的編譯 35 2.3.1 Windows平臺編譯 FFmpeg 36 2.3.2 Linux平臺編譯 FFmpeg 37 2.3.3 macOS平臺編譯 FFmpeg 38 2.4 FFmpeg特性的選擇與定制 38 2.4.1 編碼器支援 40 2.4.2 解碼器支持 41 2.4.3 封裝支持 41 2.4.4 解封裝支持 42 2.4.5 通信協定支援 42 2.5 小結 43 第3章 FFmpeg工具使用基礎 44 3.1 ffmpeg常用命令 44 3.1.1 封裝轉換 46 3.1.2 解碼和編碼 47 3.1.3 轉碼流程 48 3.2 ffprobe常用命令 49 3.2.1 ffprobe常用參數 49 3.2.2 ffprobe使用示例 51 3.3 ffplay常用命令 58 3.3.1 ffplay常用參數 59 3.3.2 ffplay高級參數 60 3.3.3 ffplay的資料視覺化分析 應用 63 3.3.4 ffplay快速鍵 65 3.4 小結 65 第4章 封裝與解封裝 66 4.1 視頻檔轉MP4 67 4.1.1 MP4格式標準介紹 68 4.1.2 Fragment MP4與CMAF 89 4.1.3 MP4分析工具 91 4.1.4 MP4在FFmpeg中的 Demuxer 94 4.1.5 MP4在FFmpeg中的 Muxer 95 4.2 視頻檔轉FLV 99 4.2.1 FLV檔標準介紹 99 4.2.2 FLV Muxer參數說明 104 4.2.3 文件轉FLV舉例 104 4.2.4 生成帶關鍵索引的 FLV 105 4.2.5 FLV檔案格式分析 工具 106 4.3 視頻檔轉MPEG-TS 107 4.3.1 MPEG-TS格式簡介 109 4.3.2 MPEG-TS Muxer參數 說明 113 4.3.3 MPEG-TS格式分析 工具 114 4.4 視頻檔轉HLS 115 4.4.1 HLS標準的M3U8 介紹 116 4.4.2 HLS Muxer參數 119 4.4.3 HLS Muxer舉例說明 119 4.5 視頻檔切片 128 4.5.1 segment切片參數 128 4.5.2 segment切片舉例 129 4.5.3 使用ss與t參數切片 132 4.6 視頻檔的音視頻流抽取 133 4.6.1 提取AAC音訊流 133 4.6.2 提取H.264視頻流 134 4.6.3 提取H.265視頻流 134 4.7 系統資源使用情況 135 4.8 小結 136 第5章 編碼與轉碼 137 5.1 軟編碼H.264 138 5.1.1 x264編碼參數簡介 139 5.1.2 H.264編碼舉例 141 5.2 硬體加速 154 5.2.1 基於OS的硬體加速方案 簡介 155 5.2.2 NVIDIA GPU硬編 解碼 163 5.2.3 Intel QSV硬編解碼 165 5.2.4 Raspberry Pi硬編解碼 170 5.2.5 macOS系統硬編解碼 171 5.2.6 其他加速方案簡介 173 5.3 輸出MP3 173 5.3.1 MP3編碼參數介紹 174 5.3.2 MP3的編碼品質設置 174 5.3.3 平均碼率編碼ABR 參數 176 5.4 輸出AAC 176 5.4.1 AAC編碼器操作 178 5.4.2 FDK-AAC 179 5.4.3 高品質AAC設置 182 5.4.4 AAC音訊品質對比 182 5.5 系統資源使用情況 182 5.6 小結 183 第6章 流媒體技術 184 6.1 錄製與發佈RTMP流 185 6.1.1 RTMP參數說明 186 6.1.2 RTMP參數舉例 187 6.2 錄製與發佈RTSP流 189 6.2.1 RTSP demuxer參數 介紹 190 6.2.2 RTSP demuxer參數使用 舉例 191 6.2.3 RTSP demuxer/muxer的 一些小說明 193 6.3 錄製HTTP流 194 6.3.1 HTTP參數說明 194 6.3.2 HTTP參數舉例 195 6.4 錄製與發佈UDP/TCP流 197 6.4.1 TCP與UDP參數 197 6.4.2 TCP/UDP參數使用 舉例 198 6.4.3 TCP/UDP使用小結 201 6.5 多路流輸出 202 6.5.1 管道方式輸出多路流 202 6.5.2 tee封裝格式輸出 202 6.5.3 tee協議輸出多路流 203 6.6 DASH流輸出 204 6.6.1 參數介紹 205 6.6.2 參數舉例 205 6.7 HDS流輸出 206 6.7.1 參數說明 206 6.7.2 HDS使用舉例 207 6.8 小結 208 第7章 bitstream篩檢程式 209 7.1 aac_adtstoasc篩檢程式 210 7.1.1 ADTS格式 210 7.1.2 ASC格式 211 7.2 mp4toannexb篩檢程式 212 7.2.1 Annex B格式 213 7.2.2 AVCC格式 213 7.2.3 hevc_mp4toannexb/h264_ mp4toannexb的使用 214 7.3 h264_metadata篩檢程式 215 7.3.1 h264_metadata參數說明 216 7.3.2 h264_metadata參數舉例 216 7.3.3 其他Codec的metadata 篩檢程式 221 7.4 其他常用bitstream篩檢程式 221 7.4.1 dump_extra 221 7.4.2 trace_headers 222 7.4.3 filter_units 223 7.5 小結 225 第8章 濾鏡使用 226 8.1 濾鏡運算式使用 226 8.2 濾鏡描述格式 229 8.2.1 濾鏡基本排列方式 229 8.2.2 時間內置變數 229 8.3 視頻浮水印操作 229 8.3.1 文字浮水印示例 229 8.3.2 圖片浮水印示例 232 8.4 畫中畫操作 233 8.5 視頻多宮格處理 235 8.6 視頻字幕操作 237 8.6.1 ASS字幕流寫入視頻流 237 8.6.2 ASS字幕寫入封裝容器 238 8.7 視頻3D化處理 239 8.7.1 stereo3d處理3D視頻 239 8.7.2 3D圖像轉換示例 241 8.8 視頻截圖操作 242 8.8.1 vframes參數截取一張圖片 242 8.8.2 fps濾鏡定時獲得圖片 242 8.9 音訊流濾鏡操作 243 8.9.1 雙聲道合併單聲道 243 8.9.2 雙聲道提取 243 8.9.3 雙聲道轉雙音訊流 244 8.9.4 單聲道轉雙聲道 244 8.9.5 兩個音訊源合併雙聲道 245 8.9.6 多個音訊合併為多聲道 245 8.10 音訊音量探測 246 8.10.1 音訊音量獲得 246 8.10.2 繪製音訊波形 247 8.11 生成測試中繼資料 248 8.11.1 生成音訊測試流 248 8.11.2 生成視頻測試流 248 8.12 音視頻倍速處理 250 8.12.1 atempo音訊倍速處理 250 8.12.2 setpts視頻倍速處理 251 8.13 雲剪輯常用技術 252 8.13.1 定格幀 252 8.13.2 透明視頻相容處理 252 8.13.3 隔行交錯視頻相容處理 253 8.13.4 HDR視頻相容處理 254 8.13.5 雪碧圖和WebVTT 255 8.13.6 縮略圖 256 8.13.7 複雜項目渲染 256 8.13.8 色度摳圖 257 8.13.9 蒙版摳圖 258 8.13.10 調色 259 8.13.11 透明度調整 259 8.13.12 動態縮放 260 8.13.13 畫質檢測 260 8.13.14 濾鏡動態調整 262 8.13.15 深度學習 262 8.14 小結 264 第9章 採集設備操作 265 9.1 Linux設備操作 265 9.1.1 查看設備清單 265 9.1.2 採集設備fbdev參數說明 和使用 266 9.1.3 採集設備v4l2參數說明 和使用 266 9.1.4 採集設備x11grab參數 說明和使用 268 9.2 macOS設備操作 269 9.2.1 查看設備清單 270 9.2.2 設備採集舉例 270 9.3 Windows設備採集 273 9.3.1 使用dshow採集音視頻 設備 273 9.3.2 使用vfwcap採集視頻 設備 274 9.3.3 使用gdigrab採集視窗 274 9.4 小結 276 下篇 API使用及開發 第10章 libavformat介面的使用 279 10.1 媒體流封裝 281 10.2 媒體流解封裝 284 10.3 文件轉封裝 288 10.4 視頻截取 290 10.5 AVIO以及示例 292 10.6 AVPacket常用操作 296 10.7 小結 300 第11章 libavcodec介面的使用 301 11.1 舊介面的使用 302 11.1.1 視頻解碼舊介面 303 11.1.2 視頻編碼舊介面 306 11.1.3 音訊解碼舊介面 308 11.1.4 音訊編碼舊介面 310 11.2 新介面的使用 311 11.2.1 視頻解碼新介面 312 11.2.2 視頻編碼新介面 315 11.2.3 音訊解碼新介面 318 11.2.4 音訊編碼新介面 320 11.3 硬體加速的編解碼 322 11.3.1 硬體加速解碼 323 11.3.2 硬體加速編碼 327 11.4 AVFrame操作 329 11.5 記憶體操作 335 11.6 小結 337 第12章 libavfilter介面的使用 338 12.1 Filter和FilterGraph簡述 338 12.2 FFmpeg中內置的濾鏡 340 12.2.1 音訊濾鏡 340 12.2.2 視頻濾鏡 345 12.3 libavfilter的API使用 354 12.4 使用濾鏡給視頻加Logo 356 12.5 小結 360 第13章 FFmpeg輔助庫的使用 361 13.1 libavutil的dict與opt操作 361 13.2 libswscale的sws_scale圖像 轉換 368 13.2.1 圖像轉換流程 368 13.2.2 代碼實例 370 13.3 libswresample執行聲音轉換 374 13.3.1 聲音轉換流程 374 13.3.2 代碼實例 376 13.4 小結 379 第14章 音視頻播放機開發實例 380 14.1 播放機開發概述 380 14.2 SDL核心功能API介紹 381 14.2.1 初始化SDL庫 381 14.2.2 圖像渲染 381 14.3 SDL音訊播放 387 14.3.1 SDL事件迴圈 389 14.3.2 SDL計時器 391 14.4 播放機解碼和展示 392 14.4.1 FFmpegPlayerCtx 393 14.4.2 播放機設計 395 14.4.3 事件迴圈執行緒 399 14.4.4 demux執行緒 400 14.4.5 視頻解碼執行緒 408 14.4.6 音視頻同步 412 14.4.7 音視頻擴展 417 14.5 小結 417 第15章 FFmpeg在RTC中的實例解析 418 15.1 RTC的特點 418 15.1.1 什麼是RTC 418 15.1.2 RTC媒體傳輸 419 15.2 FFmpeg在Chromium中的應用 421 15.2.1 FFmpeg在Chromium WebRTC中的應用 422 15.2.2 FFmpeg在Chromium中的其他應用 428 15.3 FFmpeg在FreeSWITCH中的應用 433 15.3.1 FreeSWITCH簡介 433 15.3.2 FreeSWITCH的FFmpeg 模組開發環境準備 434 15.3.3 FFmpeg初始化和載入 436 15.3.4 avcodec實例 436 15.3.5 avformat實例 447 15.3.6 其他 468 15.4 FFmpeg在BareSIP中的應用 469 15.4.1 AVCodec 469 15.4.2 AVFormat 480 15.4.3 AVFilter 489 15.5 小結 494 第16章 定制FFmpeg模組 495 16.1 添加AVFormat模組 496 16.1.1 book檔案格式 496 16.1.2 添加文件 497 16.1.3 添加檔封裝格式 497 16.1.4 添加檔解封裝格式 502 16.2 添加AVCodec模組 505 16.2.1 book編解碼演算法定義 505 16.2.2 實現book編碼 505 16.2.3 實現book解碼 507 16.2.4 將轉碼器註冊到FFmpeg 並加入編譯工程 508 16.2.5 運行測試 509 16.3 添加AVFilter模組 509 16.3.1 添加基礎濾鏡 509 16.3.2 支持多執行緒影像處理 512 16.3.3 支援圖像動態化的運算式 513 16.3.4 支持process_command 515 16.4 添加Protocol模組 516 16.4.1 添加新協定的消息結構 516 16.4.2 回呼函數 517 16.4.3 編譯 518 16.4.4 測試 519 16.5 小結 519 第17章 FFmpeg調試與測試 520 17.1 自身的調試選項 520 17.1.1 debug選項 520 17.1.2 DTS/PTS問題的排查 521 17.2 loglevel與report 522 17.2.1 使用loglevel 522 17.2.2 使用report 523 17.3 在調用庫時的調試 523 17.3.1 基於日誌 524 17.3.2 基於帶調試資訊庫 524 17.4 給社區彙報Bug及提交補丁 525 17.4.1 代碼風格 525 17.4.2 給FFmpeg貢獻代碼 528 17.5 小結 530
劉歧 快手音視頻首席架構師、FFmpeg官方原始程式碼活躍維護者和推薦顧問、FFmpeg GSoC Mentor、騰訊雲TVP,擅長音視頻流媒體技術、分散式流媒體系統設計和流媒體CDN系統開發,個人技術興趣領域廣泛,包括音視頻技術、作業系統、分散式系統、通信技術、嵌入式技術等,目前在快手負責音視頻基礎技術架構升級與優化。 趙軍 騰訊專家工程師、開源愛好者。2018年成為FFmpeg maintainer,目前在騰訊雲音視頻負責視頻雲的編碼、系統優化、媒體處理框架相關工作,曾在Intel DCG/NPG 負責基於FFmpeg以及Intel平臺上的視頻編碼/解碼/轉碼、視頻後處理、視頻分析的硬體加速等工作。 杜金房 煙臺小櫻桃科技創始人、騰訊雲TVP、FreeSWITCH中文社區創始人,為FreeSWITCH開源項目貢獻了大量代碼,包括其中的FFmpeg模組(mod_av)、WebRTC和視訊會議MCU代碼等,著有《FreeSWITCH權威指南》《Kamailio實戰》。 趙文傑 好未來教育集團資深架構師、開源流媒體系統SRS 作者成員,擅長音視頻編解碼技術、流媒體直播技術、播放機開發技術、用戶端技術等,已獲得多篇音視頻流媒體相關專利,曾任職于北京藍汛、海爾、搜狐暢遊等公司。 宋韶潁 快手音視頻SDK工程師,擅長音視頻編解碼技術、流媒體直播技術,深度使用FFmpeg落地多個分散式轉碼系統、流媒體CDN系統、音視頻雲編輯系統,曾任職于北京藍汛、金山雲等公司。
客服公告
热门活动
订阅电子报