如果你想推流多个视频,你可以使用 -i 参数多次指定视频文件的路径。例如,你可以使用 ffmpeg -re -i video1.mp4 -i video2.mp4 -vcodec libx264 -acodec aac -f flv rtmp://localhost:1935/rtmplive/home 来推流 video1.mp4 和 video2.mp4 这两个视频。
你也可以使用 -f concat 参数来将多个视频文件合并成一个输入源,然后使用 -i 参数指定合并后的视频文件。这样,你就可以使用单个命令推流多个视频。例如:
ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4
ffmpeg -re -i output.mp4 -vcodec libx264 -acodec aac -f flv rtmp://localhost:1935/rtmplive/home
其中,list.txt 是一个文本文件,其中包含了要合并的视频文件的列表。每一行的格式为 file '/path/to/video.mp4'。例如:
file '/path/to/video1.mp4'
file '/path/to/video2.mp4'
file '/path/to/video3.mp4'
这样,你就可以使用两条命令推流多个视频了。
一、FFmpeg推RTMP流准备工作首先确保自已已经安装了nginx + rtmp服务器。 打开配置文件nginx.conf 完成如下配置 nginx配置.1 如果没有nginx + rtmp服务器,请阅读我的另一篇文章 Mac搭建nginx+rtmp服务器 二、FFmpeg推流 1.推流MP4文件 视频文件地址:/Users/xu/Desktop/bangbangbang.mp4 推流拉流地址:rtmp://localhost:1935/rtmplive/home acc:RTMP的音频格式 flv: RTMP的视频格式 ffmpeg -re -i /Users/xu/Desktop/bangbangbang.mp4-vcodec libx264 -acodec aac -f flv rtmp://localhost:1935/rtmplive/home 设置推流.2 输入命令行后,暂时先不要点回车,等设置好本地拉流后,再进行推流。 2.本地拉流MP4文件 打开VLC播放器 VLC.3 设置播放地址 设置播放地址.4 设置拉流地址 rtmp://localhost:1935/rtmplive/home 拉流地址.5 开始推流,点击open后开始播放。 FFmpeg推流成功.6 推流成功! 三、用ffmpeg推流桌面以及推流摄像头进行直播 1.如果希望将桌面录制或者分享,可以使用命令行如下: ffmpeg -f avfoundation -i "1" -vcodec libx264 -preset ultrafast -acodec libfaac -f flv rtmp://localhost:1935/rtmplive/home 这个只能够推桌面。 2.如果需要桌面+麦克风,比如一般做远程教育分享 命令行如下: ffmpeg -f avfoundation -i "1:0" -vcodec libx264 -preset ultrafast -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://localhost:1935/rtmplive/home 这个可以推桌面+麦克风。 3.如果需要桌面+麦克风,并且还要摄像头拍摄到自己,比如一般用于互动主播,游戏主播,命令行如下 ffmpeg -f avfoundation -framerate 30 -i "1:0" \-f avfoundation -framerate 30 -video_size 640x480 -i "0" \-c:v libx264 -preset ultrafast \-filter_complex 'overlay=main_w-overlay_w-10:main_h-overlay_h-10' -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://localhost:1935/rtmplive/home 这个可以推桌面+麦克风,并且摄像头把人头放在界面下面 Snip20160713_12.png 四、FFmpeg常用基本命令 1.分离视频音频流 ffmpeg -i input_file -vcodeccopy-an output_file_video//分离视频流ffmpeg -i input_file -acodeccopy-vn output_file_audio//分离音频流 2.视频解复用 ffmpeg–itest.mp4 –vcodeccopy–an–fm4vtest.264ffmpeg –itest.avi –vcodeccopy–an–fm4vtest.264 3.视频转码 ffmpeg –i test.mp4 –vcodec h264 –s352*278–an –f m4v test.264//转码为码流原始文件ffmpeg –i test.mp4 –vcodec h264 –bf0–g25–s352*278–an –f m4v test.264//转码为码流原始文件 ffmpeg –i test.avi -vcodec mpeg4 –vtag xvid –qsame test_xvid.avi//转码为封装文件 -bf B帧数目控制 -g 关键帧间隔控制 -s 分辨率控制 4.视频封装 ffmpeg –i video_file –i audio_file –vcodeccopy–acodeccopyoutput_file 5.视频剪切 ffmpeg –i test.avi –r1–f image2 image-%3d.jpeg//提取图片ffmpeg -ss0:1:30-t0:0:20-i input.avi -vcodec copy -acodec copy output.avi//剪切视频 -r 提取图像的频率 -ss 开始时间 -t 持续时间 6.视频录制 ffmpeg –i rtsp://192.168.3.205:5555/test –vcodec copy out.avi 7.YUV序列播放 ffplay -f rawvideo -video_size1920x1080 input.yuv 8.YUV序列转AVI ffmpeg–sw*h–pix_fmtyuv420p–iinput.yuv –vcodecmpeg4output.avi 9.常用参数说明: 主要参数: i 设定输入流 f 设定输出格式 ss 开始时间 视频参数: b 设定视频流量,默认为200Kbit/s-r 设定帧速率,默认为25 s 设定画面的宽与高-aspect 设定画面的比例 vn 不处理视频-vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器 音频参数: ar 设定采样率 ac 设定声音的Channel数 acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器an 不处理音频最近需要做实时录屏并把视频推流到RTSP服务器,具体流程是抓取屏幕内容(bitmap),并把bitmap转化为YUV,接着把YUV编码成H264,再把H264码流推到RTSP服务器;把采集到的PCM编码为AAC,再把AAC推流至RTSP服务器。
看了雷神的一篇文章: 最简单的基于FFmpeg的推流器(以推送RTMP为例) ,他是把本地的视频文件推流至RTMP服务器,并不符合我的要求。
接着我找到另一篇文章: ffmpeg实现H264压缩并且推流至RTSP ,这篇文章只有图像编码,并没有音频编码,并且推流之后并没有播放成功。
我综合上面两位大佬的思路,和查找一些资料实现了这个功能。
RTSP服务器使用的是 HappyTime 的免费试用版本。
我抓到的bitmap是BGRA格式的,所以使用的图像格式是 AV_PIX_FMT_BGRA , cropImage 是含有rgba图像的数组
调用:
由于我是实时抓取的屏幕, frame_yuv->pts 设为当前的时间戳,以保证能正常播放。
调用:
调用:
其中pcm_buff是包含pcm数据的数组
使用udp传输时传到1400多帧就断开链接了,原因不明,所以改用使用tcp协议传输
延迟有1.5秒左右
参考:
https://blog.csdn.net/leixiaohua1020/article/details/39803457
https://blog.csdn.net/yunge812/article/details/79345584
https://trac.ffmpeg.org/wiki
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)