FFmpeg可用来进行音视频的编解码、转码、剪辑、合成等操作。在流媒体领域,FFmpeg也是一个非常重要的工具,可以用来进行RTSP推流、HLS推流、RTMP推流等操作。
FFmpeg推流,以RTSP推流示例:
RTSP推流是指将本地的音视频流通过RTSP协议推送到远程服务器上,实现实时的音视频传输,RTSP推流的命令:
ffmpeg -re -i input.mp4 -c:v copy -c:a copy -f rtsp rtsp://server_ip:port/stream_name
其中,-re 表示以实时模式推流,-i表示输入的音视频文件,-c:v copy表示视频不进行编码,直接复制原始数据,-c:a copy表示音频也不进行编码,直接复制原始数据,-f rtsp表示输出的协议为RTSP,rtsp://server_ip:port/stream_name表示推流的地址。
ffplay/VLC拉流显示:
ffplay rtsp://server_ip:port/stream_name
FFmpeg收流保存为视频
ffmpeg -i rtsp://server_ip:port/stream_name -c copy stream_name
接收结束后检查一下生成的本地文件 stream_name 能否正常播放。
FFmpeg流媒体格式转换
FFmpeg进行流媒体的处理,比如将视频文件转换为HLS格式,以便在Web端进行播放,基本的HLS转换命令:
ffmpeg -i input.mp4 -c:v libx264 -c:a aac -strict -2 -f hls -hls_time 10 -hls_list_size 0 output.m3u8
其中,-i表示输入的音视频文件,-c:v libx264表示视频编码器为H.264,-c:a aac表示音频编码器为AAC,-strict -2表示使用官方AAC编码器,-f hls表示输出的协议为HLS,-hls_time 10表示每个TS文件的时长为10秒,-hls_list_size 0表示不限制M3U8文件中TS文件的数量,output.m3u8表示输出的M3U8文件名。