音视频的应用
- 互动直播系统
- 娱乐直播系统
- 音视频特效
- 音视频编辑
音视频常用工具
- ffmpeg
FFmpeg
是一个开源免费跨平台的视频和音频流方案。 - ffplay
ffplay
是ffmpeg
源码中提供的一个播放器实现例子。
很多成熟播放器是基于ffplay
修改而来的,如果想基于ffmpeg
实现自己的播放器,或者维护一个基于ffmpeg
的播放器,ffplay
都是一个很好的切入点。 - vlc
vlc
是一种开源播放器,其中内部调用了ffmpeg
部分实现。
vlc
还有一个非常好的功能——播放那些没有下载完整的视频文件。
最简单的直播系统架构模型
可能产生的问题:
-
推流失败
产生问题:
推流推到一半报如下错:Failed to update header with correct duration
Failed to update header with correct filesize
没有正确的时长,正确的文件大小;
产生原因:
最主要的原因是时间戳出现了问题。
因为默认情况下,ffmpeg
尝试以尽可能快的速度读取输入。他将音频和视频分开,按最快的方式进行播。导致音频和视频很难同步,时间戳对不上。
解决方法:
-re
这个选项会将输入的读取速度降低到输入的本地帧速率。它对于实时输出(例如直播流)很有用。 -
清晰度不高
原因: 读取音频流和视频流的时候,按照默认的视频质量重新编码了,导致视频质量降低。
解决:-c
不让他重新编码。
注意: 丢包,也会造成花屏和卡顿。
Linux基础知识
基本命令:
ls
,cd
, pwd
(查看当前目录的具体位置), mkdir
, cp
(拷贝), rm
(删除文件或目录), sudo
(切换权限),pkg-config
(开发c,c++, 链接库使用的)
ls -alt
: 当前目录下的所有子目录倒序排序
echo "123" >> 1.txt
: 向“1.txt”追加内容“123”
echo "123" > 1.txt
:覆盖“1.txt”原内容并重新输入内容"123",若文件不存在则创建文件
rm -rf 111
: 循环强制删除, r:循环 f:强制
安装工具:
apt(Linux ubuntu)/brew(Mac)/yum(CentOS)
vim基本操作:
:w
保存文件
:q
退出
i
进入编辑模式
esc
退出编辑模式
h
光标左移
j
光标下移
k
光标上移
l
光标右移
https://www.runoob.com/linux/linux-vim.html
Linux中的环境变量:
PATH
PKG_CONFIG_PATH
用于放置.pc库LD_LIBRARY_PATH
用于放置.so库
环境变量的变更:
~/.bashrc
(linux)
~/.bash_profile
(mac)
修改变更环境变量后需要执行:source ~/.bash_profile
mac下。 修改的环境变量才生效。
Mac下安装ffmpeg的方式
- brew 方式
- 源码方式安装
- 下载ffmpeg
- 编译ffmpeg
./configure --prefix=/usr/local/ffmpeg -enable-debug=3
make -j 4
指定4个进程进行编译make install
将编译好的ffmpeg进行安装- 权限不够的话,前面加上
sudo
ffmpeg目录结构:
bin
命令工具ffmpeg
音视频处理ffplay
播放器ffprobe
侦测多媒体文件:格式,基本信息等
include
头文件 (用ffmpeg进行二次开发的时候需要引用头文件)libavcodec
各种类型声音/图像编解码libavdevice
管理设备libavfilter
各种滤镜libavformat
多媒体文件格式处理libavutil
基本工具libpostproc
后期效果处理libswresample
音频重采样libswscale
视频场景比例缩放、色彩映射转换
lib
动态库或静态库.dylib
结尾的为动态库.a
结尾的为静态库
share
文档相关man
手册(详细的命令信息)