首先用FFmpeg的remuxing.c例程出来做测试,主要是用来读取IPC出来的rtsp流存成FLV或者发布成rtmp,进过试验,存成的flv格式是正确的格式,rtmp也能正常在播放器上面播放,在flv.js上面播放都没问题(我的nginx是有集成nginx-http-flv-module的)。
1. 初始化和打开流 这是第一步要做的工作,打开了流后才能往下接收数据,打开流需要调用FFmpeg的API avformat_open_input函数,这个函数连接网络的时候会阻塞的,所以要设置超时值,否则有时候会阻塞很久时间。怎么设置超时时间? AVDictionary* options = nullptr; av_dict_set(&options, "stimeout", "3000000", 0)...
如果指定为NULL,可以设定后两个参数(format_name或者filename)由FFmpeg猜测输出格式。 PS:使用该参数需要自己手动获取AVOutputFormat,相对于使用后两个参数来说要麻烦一些。 format_name:指定输出格式的名称。根据格式名称,FFmpeg会推测输出格式。输出格式可以是“flv”,“mkv”等等。 filename:指定输出文件的名称。根据...
上文有提到,RTMP一般用flv流数据,因此多设置-f flv。 接着,另一个基本需求,就是在推流的时候希望不要加上音频,这个也好实现: ffmpeg-i ${input_video}-vcodec copy-an-f flv rtmp://${server}/live/${streamName} -vcodec:指定视频解码器,v是视频video,codec就是解码器,后跟解码器名称,copy表示不作解码...
FFmpeg学习(八)RTMP与FLV协议 目录 一:RTMP协议 详细解析见:https://www.jianshu.com/p/b2144f9bbe28 (一)RTMP创建流的基本流程 RTMP协议是应用层协议,是要靠底层可靠的传输层协议(通常是TCP)来保证信息传输的可靠性的。 在基于传输层协议的连接建立完成后,RTMP协议也要客户端和服务器通过“握手”来建立基于...
ffmpeg-i${input_video}-vcodeccopy-an-fflvrtmp://${server}/live/${streamName} 1. -vcodec:指定视频解码器,v是视频video,codec就是解码器,后跟解码器名称,copy表示不作解码; -acodec:指定音频解码器,同理,a是audio,后跟解码器名称。an代表acodec none就是去掉音频的意思。
1. 截取一段视频:ffmpeg -i test.mp4 -ss 8 -t 2 -s 1280x720 -codec copy -f flv test1.flv // -ss 开始时间:set the start time offset,单位秒,-t 持续时间 -s 分辨率。截取原视频中从第8秒开始,持续时间2秒的视频。输出分辨率1280x720 2. 添加图片水印:ffmpeg -i test.mp4 -vf "movie=...
但RTMP原本因FLV格式而生,客户端要用Flash播放器播放rtmp链接。而FLV格式后来没落了,以至HTML5规范干脆移除了Flash插件,导致如今浏览器都不支持rtmp链接,连FFmpeg也迟至6.1版才给rtmp协议支持hevc格式。不过好在RTMP的稳定性高,服务端的实现相对容易,因此被大量应用于网络直播领域。
cd ffmpeg-4.0.2 # 编译设置 ./configure --enable-shared --prefix=/usr/local/ffmpeg # make && make install 4 OBS 推流测试 QA 1. nginx 404 # location 中添加下面一行允许跨域 # https://stackoverflow.com/questions/44664270/nginx-hls-stream-not-working ...
网上查了很多关于FFmpeg读取内存264直接发布成rtmp的资料,发现这方面的资料很少,最近做了这方面的功能,特此记录下。 问题描述 网上很多类似音视频转码的例子(无编解码过程,就是音视频格式重新封装),但是都是基于有输入文件,我的需求是,从内存读取一帧帧的264码流存成flv或发布成rtmp(rtmp本身的音视频格式就是flv)。