赞
踩
1、启动EasyDarwin流媒体服务器,然后启动RTSP推流(1080P + h264编码):
./demo /dev/video0 1920 1080 0
注:./demo 为本地自写的推流工具。 可以使用VLC或者ffmpeg推RTSP流进行代替。
2、拉流播放视频测试:
语法:ffplay -i "拉流地址" -fflags nobuffer
注:nobuffer为实时播放
使用ffmpeg命令行播放:
ffplay.exe rtsp://172.16.19.67/dev/video0
出图如下:
3、FFmpeg 抓流,保存视频
ffmpeg.exe -i rtsp://172.16.19.67/dev/video0 -c copy -f mpegts ts1001.ts
抓流保存文件如下:
4、使用多媒体码流分析器ffprobe.exe 查看文件格式:
ffprobe.exe ts1001.ts
查看结果:
5、使用VLC播放抓流存储的ts1001.ts文件 —— 如下,说明已成功抓流存储到本地:
6、控制输出文件大小
-fs (file size首字母缩写)
ffmpeg -i input.avi -fs 1024K output.mp4
计算输出文件大小
(视频码率+音频码率) * 时长 /8 = 文件大小K
设置文件输出大小为10M=1024K*10=10240k ,
存储路径:./video_storage ,
存储文件名: ts008.ts , 命令行如下:
ffmpeg.exe -y -i rtsp://172.16.19.67/dev/video0 -vcodec copy -f mpegts -fs 10240k ./video_storage/ts008.ts
7、录像存储 ——
把rtsp流
切割成TS
的切片,并生成M3U8
索引,视频流hls
ffmpeg.exe -i rtsp://172.16.19.67/dev/video0 -c:v libx264 -hls_time 8 -hls_list_size 0 -strict -2 -f hls video_storage\record.m3u8
命令说明:
开始切割:
切割完成后,索引文件record.m3u8:
record.m3u8内容:
- //record.m3u8内容:
- #EXTM3U
- #EXT-X-VERSION:3
- #EXT-X-TARGETDURATION:10
- #EXT-X-MEDIA-SEQUENCE:0
- #EXTINF:10.000000,
- record0.ts
- #EXTINF:10.000000,
- record1.ts
- #EXTINF:10.000000,
- record2.ts
- #EXTINF:10.000000,
- record3.ts
- #EXTINF:10.000000,
- record4.ts
- #EXTINF:10.000000,
- record5.ts
- #EXTINF:10.000000,
- record6.ts
- #EXTINF:10.000000,
- record7.ts
- #EXTINF:10.000000,
- record8.ts
- #EXTINF:10.000000,
- record9.ts
- #EXTINF:10.000000,
- record10.ts
- #EXTINF:10.000000,
- record11.ts
- #EXTINF:10.000000,
- record12.ts
- #EXTINF:10.000000,
- record13.ts
- #EXTINF:10.000000,
- record14.ts
- #EXTINF:10.000000,
- record15.ts
- #EXTINF:10.000000,
- record16.ts
- #EXTINF:10.000000,
- record17.ts
- #EXTINF:10.000000,
- record18.ts
- #EXTINF:10.000000,
- record19.ts
- #EXTINF:10.000000,
- record20.ts
- #EXTINF:10.000000,
- record21.ts
- #EXTINF:10.000000,
- record22.ts
- #EXTINF:10.000000,
- record23.ts
- #EXTINF:10.000000,
- record24.ts
- #EXTINF:10.000000,
- record25.ts
- #EXTINF:10.000000,
- record26.ts
- #EXTINF:10.000000,
- record27.ts
- #EXTINF:10.000000,
- record28.ts
- #EXTINF:10.000000,
- record29.ts
- #EXTINF:10.000000,
- record30.ts
- #EXTINF:10.000000,
- record31.ts
- #EXTINF:10.000000,
- record32.ts
- #EXTINF:10.000000,
- record33.ts
- #EXTINF:10.000000,
- record34.ts
- #EXTINF:10.000000,
- record35.ts
/******************************************* TODU **************************************************/
8、自动存储覆盖
9、7*24h自动存储覆盖
******************************************* 补充: **********************************************************//
视频文件本身其实是一个容器(container)
,里面包括了视频和音频,也可能有字幕等其他内容。
常见的容器格式有以下几种。一般来说,视频文件的后缀名反映了它的容器格式。
查看 FFmpeg 支持的容器
$ ffmpeg -formats
视频和音频都需要经过编码,才能保存成文件。不同的编码格式(CODEC)
,有不同的压缩率,会导致文件大小和清晰度的差异。
常用的视频编码
上面的编码格式都是有版权的,但是可以免费使用。此外,还有几种无版权的视频编码格式
常用的音频编码
上面所有这些都是有损的编码格式,编码后会损失一些细节,以换取压缩后较小的文件体积。无损的编码格式压缩出来的文件体积较大,这里就不介绍了,可以查看 FFmpeg 支持的编码格式,视频编码和音频编码.
$ ffmpeg -codecs
编码器(encoders)
是实现某种编码格式的库文件。只有安装了某种格式的编码器,才能实现该格式视频/音频的编码和解码。
这是一些 FFmpeg 内置的视频编码器
音频编码器如下
查看 FFmpeg 已安装的编码器
$ ffmpeg -encoders
4、查询使用的ffmpeg版本是否支持 CUDA, 命令:
ffmpeg -hwaccels
查询结果:
5、测试指定使用cuvid硬件加速,
ffmpeg.exe -hwaccel cuvid -c:v h264_cuvid -i test.mp4 -c:v h264_nvenc -y test_cuda.mp4
6、m3u8 与MP4 简单对比:
MP4
对HTML5
和flash
播放器亲和度都挺好。但是文件头太大,需要加载完成才能播放,其次结构复杂,长视频的大文件头影响加载速度的视频体验,所以MP4
在短视频的应用更常见m3u8
采用苹果的HLS
协议,目前 ios
与android
设备均已支持。由于其工作原因是将整个视频流分成一个个小的基于Http
的文件进行下载播放,因此支持视频直播,和视频加速播放
参考&&致谢:
1、 使用FFmpeg工具进行推流、拉流、截图、变速、转换,及常见问题处理
2、ffmpeg 基本用法 —— https://www.jianshu.com/p/3c8c4a892f3c
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。