ffmpeg的调用命令如下:
ffmpeg -re -i xxx.mp4 -vcodec copy -acodec copy -f rtsp rtsp://127.0.0.1/live/mystream
用ffmpeg做输入测试
ffmpeg -re -i "E:\片源\复仇者联盟720p.mov" -vcodec copy -acodec copy -f flv rtmp://192.168.11.75/live/test1 ffmpeg -re -i "E:\片源\复仇者联盟720p.mov" -vcodec copy -acodec copy -f flv rtmpt://192.168.11.75:8080/live/test1
音视频的编码格式只能为H264、AAC。
发布以后可以通过rtmp的方式点播,流名称是从s=No Name获取的,即名称就叫“No Name”,而不是ffmpeg命令中rtsp URL地址上的“mystream”。这样就存在一个问题,不能通过ffmpeg向crtmpserver发布多路流了,因为流的名称都为“No Name”。
从crtmpserver的日志可以看到sdp如下(需要将sources/thelib/include/protocols/rtp/rtspprotocol.h中的RTSP_DUMP_TRAFFIC定义打开):
ANNOUNCE rtsp://127.0.0.1:554/live/mystream RTSP/1.0
Content-Type: application/sdp
CSeq: 2
Content-Length: 498
v=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 127.0.0.1
t=0 0
a=tool:libavformat 54.63.104
m=video 0 RTP/AVP 96
b=AS:509
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z0KAIJZSAKwMPN4CoQAAAwABAAADAAadoYMkgA==,aMuNSA==; profile-level-id=428020
a=control:streamid=0
m=audio 0 RTP/AVP 97
b=AS:102
a=rtpmap:97 MPEG4-GENERIC/44100/2
a=fmtp:97 profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3; config=1210
a=control:streamid=1
解决方法:
修改sources/thelib/src/protocols/rtp/basertspappprotocolhandler.cpp文件的HandleRTSPRequestAnnounce函数,原来的代码为
string streamName = sdp.GetStreamName();
if (streamName == "") {
streamName = format("rtsp_stream_%u", pFrom->GetId());
}
pFrom->GetCustomParameters()["sdpStreamName"] = streamName;
即流名称是从sdp的s字段获取的。
需要改为从url获取,为了方便解析,可规定url中"?"后面的为流名称,形式为rtsp://127.0.0.1/live?mystream。如果url中没有"?",会使用ID命名为“rtsp_stream_ID”的形式。
代码相应改为:
vector<string> lines;
string streamName;
split(requestHeaders[RTSP_FIRST_LINE][RTSP_URL], "?", lines);
if (lines.size() != 2) {
streamName = format("rtsp_stream_%u", pFrom->GetId());
}else {
streamName = lines[1];
}
pFrom->GetCustomParameters()["sdpStreamName"] = streamName;
相关推荐
Andorid 项目中使用FFmpeg拉取RTSP流 然后 推送到RTMP服务器
使用ffmpeg api拉rtsp流,存本地h264文件
python操作ffmpeg对摄像头rtsp流进行自动转码-.pdf
在c#中直接调用ffmpeg接口有些困难,但是如果功能简单,通过二次封装接口成dll给c#调用就很方便了,例如在c#中显示rtsp视频,可以直接改造ffmepg的示例代码demuxing.c ,封装成dll给c#调用,在c#直接用一个...
在QT中拉取RTSP视频流并用FFMPEG解码播放。
android 移植ffmpeg源码 实现rtsp流实时播放及保存成MP4文件可以回放;亲测有效
C# 使用FFmpeg库保存rtsp视频流为本地文件,获取摄像头rtsp视频流地址可以参考我的另一个资源
RTSP, RTMP协议推流, 以及保存到本地MP4,MKV录像文件。 如果要成功编译, 需要下载和编译ffmpeg库,libfdk-aac库,x264库。 编译这些库,非常耗时。如果懒得去编译, 可以直接使用已经编译好的stream_push.dll...
调用ffmpeg接口,打开rtsp流,保存为mp4,可播放. 如果觉得下载分数太多,可以去吾博客相应的栏目查找. https://blog.csdn.net/quantum7
C++封装的FFMPEG拉取音视频接口类,调用简单,采用回调方式取数据,工程采用VS2015,希望对需要的人有帮助!
主要展示了使用ffmpeg实现0延时rtsp,rtmp推流功能,以及flv视频流文件的存储 支持windows usb摄像机推流和linux嵌入式系统真实开发板的推流 深圳市好游科技同时提供超低延时(100-200毫秒)的rtsp,rtmp播放器 支持...
实现ffmpeg将RTSP流封装成mp4、avi、flv文件的源码,也只封装格式转换,希望对你有用.........
2)、可选择使用javaCV推流、ffmpeg推流两种方式。 3)、javaCV仅支持拉去或推送H264压缩方式的流。 4)、ffmpeg采用命令的方式拉流和推流,支持H265和H264。 5)、支持获取流的访问数,可设置自动关闭0访问数的...
本资源包含完整的Vs+Qt+FFmpeg代码。 资源介绍:https://blog.csdn.net/automoblie0/article/details/124830219 资源视频介绍:https://www.bilibili.com/video/BV1pN4y137Mo/?spm_id_from=333.999.0.0 【视频中展示...
使用FFmpeg和FFserver将RTSP转换为MJPEG流 以下是可用的环境变量及其默认值。 根据需要覆盖它们。 变数 默认 RTSP_URL rtsp://freja.hiof.no:1935 / rtplive / definst / hessdalen03.stream FFSERVER_LOG_...
FFMPEG/OpenCV实现RTSP码流解码显示的程序V2.0(可工程应用) 解压密码:ezhchai 使用说明 1.采用FFMPEG实现解码,利用OpenCV进行显示,海康威视摄像机10小时稳定测试,可工程应用,同时提供Debug和Release版本; 2....
实现了一路Qt + FFmpeg RTSP视频流的解码,调用FFmpeg API实现,版本为FFmpeg 4.1.2。实测视频延迟为200ms 以内,已达到商业使用标准。
FFMPEG实现RTSP中H264数据流解码 并且实时播放 具体解释参考https://blog.csdn.net/yunge812/article/details/79709307
这是Qt设计的推流软件,核心全部由ffmpeg实现,QT只是做了个界面没有做其他重要的事情。如果要利用ffmpeg开发推流软件,这个一份必看的好东西。目前实现了桌面捕获、摄像头捕获推流,全部由ffmpeg的API实现。
使用FFMPEG+easydrawin把本地摄像头进行rtsp推流指令 要先安装启动easydarwin,然后查看本地摄像头名称,然后ffmpeg推流 最近在学习ffmpeg的基本操作,ffmpeg功能非常强大,可以运行音频和视频多种格式的录影、...