手记

【金秋打卡】第1天 音视频应用的场景

课程名称音视频基础+ffmpeg原理 入门音视频技术开发
课程章节:音视频环境基础
课程讲师李超

课程内容

1.音视频的应用

  • 互动直播系统,比如:在线教育,音视频会议,特点是交互性强;
  • 娱乐直播系统,比如:电视系统,斗鱼,特点是现场和互动直播系统开始融合;
  • 音视频特效,比如:美颜,变声等;
  • 音视编辑,比如:视频编辑,爱剪辑等;
  • 其他:比如:监控系统。

2.娱乐直播系统

这一讲介绍了简单的娱乐直播系统的实现,在开始之前,需要先了解一些前置知识。

  • ffmpeg 是用于推流到流媒体服务器的;
  • ffplay 是用于从流媒体服务器通过 rtmp 取流并播放的;
  • vlc 也可以从 rtmp 地址取流并播放的,而且还可以进行暂停等 ffplay 没有的操作。

实现简单的直播演示大概需要经过以下几个步骤:

  1. 首先要有一个流媒体服务器,用来将音视频流推到流媒体服务器上。
ffmpeg -i ~/Documents/new_killer.mp4 -f flv rtmp://localhost/live/test
  1. 另外还需要客户端从流媒体服务器上拉取流,并播放出来。
ffplay rtmp://localhost/live/test
  1. 先执行拉取流的指令,再执行推流的指令
  2. 还可以使用ffplay 直接播放视频。
ffplay ~/Documents/new_keller.mp4

也可以直接使用vlc播放,vlc播放器有播放暂停等按钮,ffplay中没有这些。

3.遗留两个问题及解决

在实现直播演示时,遇到了两个问题:
1.推流失败
分析推流失败的报错信息:时长不对,没有正确的文件大小,最主要的原因是时间戳出了问题。播放时默认采用最快的优先级方式,ffmpeg将音频和视频分开,按最快的方式进行推流,音视频就很难进行同步了。比如放音频的时候,发现和视频流的时间戳不匹配,就报错了。解决办法加上 -re 参数:让音视频按照原来的速度进行播放(同步)

ffmpeg -i ~/Documents/new_killer.mp4 -f flv rtmp://localhost/live/test

补充 ffmpeg re 参数
-re (input)

Read input at native frame rate. This is equivalent to setting -readrate

以原始帧率的方式读取,等价于设置:readrate = 1,不设置该参数则以尽量快的方式推流,导致音视频不同步。

-c[:stream_specifier] codec (input/output,per-stream)
-codec[:stream_specifier] codec (input/output,per-stream)
Select an encoder (when used before an output file) or a decoder (when used before an input file) 
for one or more streams. codec is the name of a decoder/encoder or a special value copy
 (output only) to indicate that the stream is not to be re-encoded。

选择编码器,copy表示无需进行编码。不设置-c copy 则默认对mp4进行重新编码成flv,重新编码会导致视频清晰度下降。

2.清晰度不高
当通过 -f flv 的方式的时候,将会mp4 重新编码,将导致视频质量损失,如果想不损失,就加上参数 -c copy,完全采用之前的视频清晰度。-c:v copy, 只拷贝视频的格式,不考虑音频。

ffmpeg -re -i ~/Documents/new_killer.mp4 -c:v copy -f flv rtmp://localhost/live/test

0人推荐
随时随地看视频
慕课网APP