基于v4l2 ffmpeg live555 rtsp的图像传输

1.图像的基本格式

opencv h264压缩视频_opencv 视频压缩-CSDN博客

2.图像采集

v4l2

Linux之V4L2驱动框架-CSDN博客

实时监控系统/直播系统(一)- V4L2打开摄像头-CSDN博客

实时监控系统/直播系统(二)- 用H264对视频数据进行编码-CSDN博客

实时监控系统/直播系统(三)- 用RTMP推流到Nginx,并用VLC拉流显示到Qt界面-CSDN博客

和小白一起学习V4L2采集视频_v4l2视频采集详解-CSDN博客

基于ITOP4412开发板的实时视频监控系统实现_可以部署在itop4412的简单项目-CSDN博客

查看摄像头的属性

v4l2-ctl基本使用方法-CSDN博客

V4l2-ctl-CSDN博客

V4L2+单色USB摄像头编程实践1:遍历支持的图像格式信息_v4l2_cap_meta_capture-CSDN博客

3.图像压缩

ffmpeg

ubuntu 安装ffmpeg_ubuntu安装ffmpeg-CSDN博客

Ubuntu系统-FFmpeg安装及环境配置_ubuntu ffmpeg-CSDN博客

ubuntu ffmpeg6.0开发环境搭建_libvpx.git-CSDN博客

FFMPEG(一) 从V4L2捕获摄像头数据_ffmpeg v4l2-CSDN博客

FFMPEG(二) v4l2 数据格式装换-CSDN博客

FFMPEG(三) v4l2 数据编码H264_ffmpeg v4l2-CSDN博客

ffmpeg 常用命令汇总_ffmpeg命令大全-CSDN博客

ffmpeg基础操作

(1)ffmpeg基础操作

生成m3u8切片(1)

ffmpeg -i input.mp4 -c:v libx264 -c:a copy -f hls -hls_time 10 -hls_list_size 0
-hls_start_number 0 input/index.m3u8
备注:-hls_time n: 设置每片的长度,默认值为2。单位为秒
-hls_list_size n:设置播放列表保存的最多条目,设置为0会保存有所片信息,默认值为5
-hls_start_number n:设置播放列表中sequence number的值为number,默认值为0
-hls_wrap n:设置多少片之后开始覆盖,如果设置为0则不会覆盖,默认值为0.
   这个选项能够避免在磁盘上存储过多的片,而且能够限制写入磁盘的最多的片的数量

生成m3u8切片(2)
ffmpeg -i input.mp4 -fflags flush_packets 
-max_delay 2 -flags -global_header 
-hls_time 5 -hls_list_size 0 -vcodec libx264 -acodec aac -r 30 -g 60 index.m3u8

指定码率转换
ffmpeg -i input.mp4 -b:v 10M -b:a 10M -c:v libx264 -c:v aac out.mp4
备注:切记一点,命令行中涉及编解码时,-c:v copy 不要使用,否则 比如指定的码率参数,分辨率参数
等就会失效,而且很难找到原因
  -b:v 10M 指定视频重新编码的码率为10M/s
  -b:a 10M 指定音频重新编码的码率为10M/s


指定时间段录制
ffmpeg -i input.mp4 -c:v copy -c:a copy -ss 00:10:20 -to 00:30:20 out.mp4

指定录制时长
ffmpeg -i input.mp4 -c:v copy -c:a copy -t 30 out.mp4
备注: -t 30 表示指定30秒的录制时长

提取h264 裸码流
ffmpeg -i input.mp4 -c:v copy -bsf:v h264_mp4toannexb -an out.h264

播放h264 裸码流
ffplay -stats -f h264 out.h264
ffplay -i out.h264

提取aac 裸码流
ffmpeg -i input.mp4 -acodec copy -vn out.aac
备注:-vn (disable video)

播放aac 裸码流
ffplay -i out.aac

视频倒放,音频不变
ffmpeg -i input.mp4 -vf reverse input_video_reversed.mp4

音频倒放,视频不变
ffmpeg -i input.mp4 -map 0 -c:v copy -af  "areverse" input_audio_reversed.mp4

视频音频同时倒放
ffmpeg -i input.mp4 -vf reverse -af areverse   input_reversed.mp4


提取h264 裸码流(指定编码质量)
ffmpeg -i input.mp4 -an -c:v libx264 -crf 18 out.h264

备注: -an (disable audio) 
      -c:v libx264(等价于 -vcodec h264 或 -vcodec libx264) 
      -crf 18 (固定质量值18)

转码->AVC(指定转码的部分参数)
ffmpeg -i input.mp4 -c:v libx264 -preset slow -tune film -profile:v main out.mp4
备注:-tune film (主要配合视频类型和视觉优化的参数) 
     -preset slow 
         编码预设,主要调节 编码速度和质量的平衡
         10个选项如下 从快到慢:ultrafast、superfast、veryfast、faster、fast、medium、slow、slower、veryslow、placebo
     -profile:v main 
         h264有四种画质级别,分别是baseline, extended, main, high:
         1、Baseline Profile:基本画质。支持I/P 帧,只支持无交错(Progressive)和CAVLC;
         2、Extended profile:进阶画质。支持I/P/B/SP/SI 帧,只支持无交错(Progressive)和CAVLC;(用的少)
         3、Main profile:主流画质。提供I/P/B 帧,支持无交错(Progressive)和交错(Interlaced), 也支持CAVLC 和CABAC 的支持;
         4、High profile:高级画质。在main Profile 的基础上增加了8x8内部预测、自定义量化、 无损视频编码和更多的YUV 格式;

转码->HEVC 
ffmpeg -i input.mp4 -c:v libx265 -c:a copy out.mp4

转码->AVC(指定转码的部分参数)
ffmpeg -i input.mp4 -c:v libx264 -b:v 2048k -vf scale=1280:-1 -y out.mp4
备注:-vf scale=1280:-1 (指定输出视频的宽高,高-1代表按照比例自动适应)
     -b:v 2048k(指定输出视频的码率,即输出视频每秒的bit数)


查看当前支持的编码器
ffmpeg -codecs
查看当前支持的封装格式
ffmpeg -formats
查看当前支持的滤镜
ffmpeg -filters

使用指定解码器播放视频
ffplay -vcodec h264 -i out.mp4

查看指定解码器的相关参数
ffmpeg -h decoder=h264_cuvid

查看当前支持的硬件加速选项
ffmpeg -hwaccels
例如:mac核显支持的选项(videotoolbox)英伟达显卡支持的选项(cuvid)

使用cuvid进行解码和编码实现转码
ffmpeg -c:v h264_cuvid -i input.mp4 -c:v h264_nvenc -b:v 2048k -vf scale=1280:-1 -y out.mp4
备注: -hwaccel cuvid (指定使用cuvid硬件加速)
     -c:v h264_cuvid (使用h264_cuvid进行视频解码)
     -c:v h264_nvenc (使用h264_nvenc进行视频编码)
     -b:v 2048k (指定输出视频的码率,即输出视频每秒的bit数)
     -vf scale=1280:-1 (指定输出视频的宽高,高-1代表按照比例自动适应)

使用videotoolbox进行编码实现转码
ffmpeg -i input.mp4 -vcodec h264_videotoolbox -b:v 2048k -vf scale=1280:-1 -y  out.mp4
备注:-vcodec h264_videotoolbox (使用h264_videotoolbox 进行视频编码)
     -b:v 2048k (指定输出视频的码率,即输出视频每秒的bit数)
     -vf scale=1280:-1 (指定输出视频的宽高,高-1代表按照比例自动适应)

ffmpeg查看摄像头信息

查看摄像头列表

ffmpeg -list_devices true -f dshow -i dummy

播放摄像头

ffplay -f dshow -i video="FULL HD webcam" # FULL HD webcam 是通过查看列表的命令行获得的名称

查看摄像头的分辨率格式

ffmpeg -list_options true -f dshow -i video="FULL HD webcam"

ffmpeg摄像头推流RTSP&RTMP

摄像头推流到RTMP服务

ffmpeg -f dshow -i video="USB webcam" -vcodec libx264 -acodec aac -ar 44100 -ac 1 -r 25 -s 1920*1080 -f flv rtmp://192.168.1.3/live/desktop

摄像头推流到RTSP(rtp over tcp)

ffmpeg -f dshow -i video="FULL HD webcam" -rtsp_transport tcp -vcodec libx264 -preset ultrafast -acodec libmp3lame -ar 44100 -ac 1 -r 25 -f rtsp rtsp://192.168.0.1/webcam

windows桌面推流到RTMP服务

ffmpeg -f gdigrab -i desktop -vcodec libx264 -preset ultrafast -acodec libmp3lame -ar 44100 -ac 1 -r 25 -s 1920*1080 -f flv rtmp://127.0.0.1/live/desktop

windows桌面推流到RTSP服务(rtp over udp)

ffmpeg -f gdigrab -i desktop -vcodec libx264 -preset ultrafast -acodec libmp3lame -ar 44100 -ac 1 -r 25 -f rtsp rtsp://127.0.0.1/live/desktop

ffmpeg基本推拉流命令

RTMP推流

ffmpeg -re -i input.flv -f flv -r 25 -s 1920*1080 -an "rtmp://127.0.0.1/live/test"

RTSP拉流转RTMP推流

ffmpeg -rtsp_transport tcp -i "rtsp://admin:12345678@192.168.0.2" -f flv -c:v copy -a:v copy -r 25 -s 1920*1080 "rtmp://127.0.0.1/live/test"

本地视频文件RTSP推流 (tcp)

ffmpeg -re -i input.mp4 -rtsp_transport tcp -vcodec h264 -acodec copy -f rtsp rtsp://127.0.0.1/live/test

本地视频文件RTSP循环推流(tcp)

ffmpeg -re -stream_loop -1 -i input.mp4 -rtsp_transport tcp -c copy -f rtsp rtsp://127.0.0.1/live/test

本地视频文件RTSP推流 (udp)

ffmpeg -re -i input.mp4 -rtsp_transport udp -vcodec h264 -acodec copy -f rtsp rtsp://127.0.0.1/live/test

RTSP拉流并播放 (tcp)

ffplay -i -rtsp_transport tcp rtsp://127.0.0.1/live/test

RTSP拉流并播放 (udp)

ffplay -i rtsp://127.0.0.1/live/test

ffmpeg常见录制命令

指定时间段录制

ffmpeg -i input.mp4 -c:v copy -c:a copy -ss 00:10:20 -to 00:30:20 out.mp4

指定录制时长

ffmpeg -i input.mp4 -c:v copy -c:a copy -t 30 out.mp4

备注: -t 30 表示指定30秒的录制时长

ffmpeg常见处理音频命令

ffmpeg命令行 从mp4视频文件提取aac 音频文件

ffmpeg -i test.mp4 -vn -acodec aac test.aac

备注:-i 表示输入文件

-vm disable video / 丢掉视频

-acodec 设置音频编码格式

ffmpeg 从aac音频文件解码为pcm音频文件

ffmpeg -i test.aac -f s16le test.pcm

备注:-i 表示输入文件

-f 表示输出格式

ffplay 播放.pcm音频文件

ffplay -ar 44100 -ac 2 -f s16le -i test.pcm

备注:-i 表示指定的输入文件

-f 表示强制使用的格式

-ar 表示播放的音频数据的采样率

-ac 表示播放的音频数据的通道数

60s长包含音频的video-60.mp4,和30s长的音频audio-30.mp3 合并。audio-30.mp3内的音频会替换到video-60.mp4的音频。

ffmpeg -i video-60.mp4 -i audio-30.mp3 -c:v copy -c:a aac -strict experimental -map 0:v:0 -map 1:a:0 out.mp4

60s长包含音频的video-60.mp4,和30s长的音频audio-30.mp3 合并。合并后的out.mp4包含两路音频。

ffmpeg -i video-60.mp4 -i audio-30.mp3 -filter_complex "amix=inputs=2:duration=first:dropout_transition=0" -c:v "libx264" -c:a "aac" -y out.mp4

看了一半,后面有点看不懂

H264简介_h.264介绍 csdn-CSDN博客

H264的基本原理_h264原理-CSDN博客

x264源代码简单分析:概述_x264源码-CSDN博客

x264

x264源代码简单分析:概述_x264源码-CSDN博客

最简单的视频编码器:基于libx264(编码YUV为H.264)-CSDN博客

https://www.cnblogs.com/wainiwann/p/7477794.html

Reactor模式介绍 - 知乎

4.图像传输

live555

1、RTSP协议、ffmepeg、live555_live555 ffmpeg区别-CSDN博客

5 live555源码分析(五)——live555 RTSP工作流程(二)_live555解析rtsp码流类型-CSDN博客

live555mediaserver——探讨下live555用的编程设计模式_live555 用到的设计模式-CSDN博客

使用live555实现实时流的推流服务器_live555实现实时推流-CSDN博客

H.264帧结构和RTSP协议源码框架_h264协议-CSDN博客

Live555源码阅读笔记(一):源码介绍文档 及 源码目录结构_live555官网接口文档-CSDN博客

Live555源码阅读笔记(二):UsageEnvironment 目录详解_live555 basicusageenvironment.cpp-CSDN博客

Live555源码阅读笔记(三):BasicUsageEnvironment 目录详解-BasicTaskScheduler、DelayQueue、HandlerSet_live555 usageenvironment-CSDN博客

实时流协议---RTSP【详解】-CSDN博客

探索C++与Live555实现RTSP服务器的艺术_lib555进行rtsp-CSDN博客

LiveNVR安防Onvif_RTSP流媒体服务-服务器配置及带宽消耗计算参考_直播服务器带宽需求计算器-CSDN博客

rtsp

RTP理解-CSDN博客

实时传输控制协议---RTCP【详解】-CSDN博客

 数传电台和各种方案之间的区别

无人机集群通信组网系统—无人机自组网(随笔) - 知乎

  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值