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;
相关推荐
在本文中,我们将深入探讨如何使用C#编程语言结合FFmpeg库来实现一个RTSP(Real Time Streaming Protocol)流媒体播放器。RTSP是一种用于控制实时流传输的应用层协议,常用于在线视频直播和监控系统。C#是Microsoft...
在本文中,我们将深入探讨如何使用FFmpeg实现RTSP(Real-Time Streaming Protocol)中的H264数据流解码并实现实时播放。 首先,RTSP是一种网络协议,用于控制实时媒体的传输。它允许客户端向服务器请求媒体流,并...
在c#中直接调用ffmpeg接口有些困难,但是如果功能简单,通过二次封装接口成dll给c#调用就很方便了,例如在c#中显示rtsp视频,可以直接改造ffmepg的示例代码demuxing.c ,封装成dll给c#调用,在c#直接用一个...
在IT领域,尤其是在多媒体处理和流媒体应用中,Qt与FFmpeg的结合使用是一种常见的解决方案。本文将深入探讨如何在Qt环境中通过FFmpeg库来拉取RTSP视频流,并进行解码播放。RTSP(Real Time Streaming Protocol)是一...
1. 解析RTSP流:使用FFmpeg的libavformat库解析RTSP URL,获取媒体流信息。 2. 创建MediaExtractor:自定义MediaExtractor类,利用FFmpeg读取RTSP流,并将数据包装成Android MediaFormat对象。 3. 初始化MediaCodec...
在本文中,我们将深入探讨如何使用C#编程语言与FFmpeg音视频解码库结合,实现多画面RTSP(Real-Time Streaming Protocol)拉流。RTSP是一种应用层协议,用于控制多媒体数据的传输,通常用于实时视频流。C#与FFmpeg的...
在本文中,我们将深入探讨如何使用FFmpeg将RTSP(Real-Time Streaming Protocol)流封装成MP4、AVI和FLV文件。RTSP是一种用于控制实时流传输的应用层协议,而FFmpeg则提供了将这种实时流转换为不同容器格式的能力。 ...
FFmpeg和Qt是两个在多媒体处理领域非常重要的开源库,它们可以被结合使用来实现实时的摄像头rtsp流显示。FFmpeg是一个强大的多媒体处理工具集,包含了编解码、音视频转换、流处理等功能。Qt则是一个跨平台的C++图形...
本教程将深入讲解如何使用C#结合FFmpeg库来保存RTSP视频流到本地文件。 首先,我们需要理解RTSP(Real-Time Streaming Protocol)的基本概念。RTSP是一种应用层协议,用于控制媒体数据的传输,通常用于IP网络上的...
Andorid 项目中使用FFmpeg拉取RTSP流 然后 推送到RTMP服务器
FFmpeg是一款强大的开源多媒体处理工具,能够处理多种格式的音频和视频,包括从RTSP流中提取和保存h264码流。下面将详细介绍如何利用FFmpeg完成这个任务。 首先,我们需要理解RTSP(Real-Time Streaming Protocol)...
在Android平台上实现RTSP流的实时播放以及将流媒体数据保存为MP4文件,通常涉及到多个技术栈的集成,其中包括FFmpeg、Android多媒体框架以及文件处理等。以下是对这个项目中涉及的关键知识点的详细说明: 1. **...
Python 操作 FFmpeg 对摄像头 RTSP 流进行自动转码 本文档旨在解决公司项目中遇到的问题,即将几个...本文档介绍了使用 Python 操作 FFmpeg 对摄像头 RTSP 流进行自动转码的解决方案,解决了公司项目中遇到的问题。
通过以上步骤,我们成功地封装了一个C++类,该类能够使用FFmpeg从RTSP流中拉取音视频数据,并通过回调方式处理这些数据。这个类可以作为基础模块,方便其他开发者在VS2015或其他环境中集成和使用。注意,实际应用中...
使用ffmpeg api拉rtsp流,存本地h264文件
### 使用FFMPEG+EasyDarwin进行RTSP推流详解 #### 一、FFMPEG简介及基本操作 FFMPEG是一款强大的多媒体处理工具,它能够处理多种格式的音视频文件,包括录制、转换和流化等操作。FFMPEG包含了一些核心组件,如...
在Windows环境下,使用Python、OpenCV以及FFmpeg处理RTSP(Real-Time Streaming Protocol)流是一项常见的任务,尤其在视频监控、直播系统等场景中。本文将深入探讨如何通过这三个工具来实现实时视频流的推流和拉流...
Qt基于ffmpeg的rtsp视频流接收播放工具是一个个人原创项目,旨在帮助开发者和爱好者学习如何在Qt环境中利用ffmpeg库处理rtsp视频流。Qt是一个跨平台的C++图形用户界面应用程序开发框架,而ffmpeg则是一个强大的开源...
RTSP, RTMP协议推流, 以及保存到本地MP4,MKV录像文件。 如果要成功编译, 需要下载和编译ffmpeg库,libfdk-aac库,x264库。 编译这些库,非常耗时。如果懒得去编译, 可以直接使用已经编译好的stream_push.dll...