`

使用ffmpeg向crtmpserver发布rtsp流

阅读更多

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;

 
分享到:
评论

相关推荐

    FFMPEG实现RTSP中数据流解码 并且实时播放

    在本文中,我们将深入探讨如何使用FFmpeg实现RTSP(Real-Time Streaming Protocol)中的H264数据流解码并实现实时播放。 首先,RTSP是一种网络协议,用于控制实时媒体的传输。它允许客户端向服务器请求媒体流,并...

    c#使用ffmpeg显示rtsp视频流

    在c#中直接调用ffmpeg接口有些困难,但是如果功能简单,通过二次封装接口成dll给c#调用就很方便了,例如在c#中显示rtsp视频,可以直接改造ffmepg的示例代码demuxing.c ,封装成dll给c#调用,在c#直接用一个...

    C#+FFmpeg实现多画面RTSP拉流

    在本文中,我们将深入探讨如何使用C#编程语言与FFmpeg音视频解码库结合,实现多画面RTSP(Real-Time Streaming Protocol)拉流。RTSP是一种应用层协议,用于控制多媒体数据的传输,通常用于实时视频流。C#与FFmpeg的...

    qt_ffmpeg_rtsp_rtsp取流_qtffmpeg流媒体_qt+ffmpeg_QT_qt_ffmpeg_rtsp

    在IT领域,尤其是在多媒体处理和流媒体应用中,Qt与FFmpeg的结合使用是一种常见的解决方案。本文将深入探讨如何在Qt环境中通过FFmpeg库来拉取RTSP视频流,并进行解码播放。RTSP(Real Time Streaming Protocol)是一...

    android ffmpeg rtsp播放

    1. 解析RTSP流:使用FFmpeg的libavformat库解析RTSP URL,获取媒体流信息。 2. 创建MediaExtractor:自定义MediaExtractor类,利用FFmpeg读取RTSP流,并将数据包装成Android MediaFormat对象。 3. 初始化MediaCodec...

    实现ffmpeg将RTSP流封装成mp4、avi、flv文件的源码

    在本文中,我们将深入探讨如何使用FFmpeg将RTSP(Real-Time Streaming Protocol)流封装成MP4、AVI和FLV文件。RTSP是一种用于控制实时流传输的应用层协议,而FFmpeg则提供了将这种实时流转换为不同容器格式的能力。 ...

    C#+FFmpeg实现RTSP流媒体播放器

    在本文中,我们将深入探讨如何使用C#编程语言结合FFmpeg库来实现一个RTSP(Real Time Streaming Protocol)流媒体播放器。RTSP是一种用于控制实时流传输的应用层协议,常用于在线视频直播和监控系统。C#是Microsoft...

    delphi 12 控件之基于FFmpeg解码播放RTSP视频流的Delphi源码51a9d-main.zip

    基于FFmpeg解码播放RTSP视频流的Delphi源码51a9d-main.zip

    利用FFmpeg和Qt实现摄像头rtsp的实时显示

    FFmpeg和Qt是两个在多媒体处理领域非常重要的开源库,它们可以被结合使用来实现实时的摄像头rtsp流显示。FFmpeg是一个强大的多媒体处理工具集,包含了编解码、音视频转换、流处理等功能。Qt则是一个跨平台的C++图形...

    C# FFmpeg保存rtsp视频流到本地文件

    本教程将深入讲解如何使用C#结合FFmpeg库来保存RTSP视频流到本地文件。 首先,我们需要理解RTSP(Real-Time Streaming Protocol)的基本概念。RTSP是一种应用层协议,用于控制媒体数据的传输,通常用于IP网络上的...

    Andorid 项目中使用FFmpeg拉取RTSP流 然后 推送到RTMP服务器

    Andorid 项目中使用FFmpeg拉取RTSP流 然后 推送到RTMP服务器

    利用ffmpeg将RTSP传输的h264原始码流保存到文件中

    FFmpeg是一款强大的开源多媒体处理工具,能够处理多种格式的音频和视频,包括从RTSP流中提取和保存h264码流。下面将详细介绍如何利用FFmpeg完成这个任务。 首先,我们需要理解RTSP(Real-Time Streaming Protocol)...

    android 移植ffmpeg源码 实现rtsp流实时播放及保存成MP4文件可以回放

    在Android平台上实现RTSP流的实时播放以及将流媒体数据保存为MP4文件,通常涉及到多个技术栈的集成,其中包括FFmpeg、Android多媒体框架以及文件处理等。以下是对这个项目中涉及的关键知识点的详细说明: 1. **...

    C++封装FFMPEG拉取RTSP的音视频流接口类

    通过以上步骤,我们成功地封装了一个C++类,该类能够使用FFmpeg从RTSP流中拉取音视频数据,并通过回调方式处理这些数据。这个类可以作为基础模块,方便其他开发者在VS2015或其他环境中集成和使用。注意,实际应用中...

    rtspToH264.zip_ffmpeg rtsp _ffmpeg rtsp_ffmpeg rtsp拉流_ffmpeg拉rt

    使用ffmpeg api拉rtsp流,存本地h264文件

    python操作ffmpeg对摄像头rtsp流进行自动转码-.pdf

    Python 操作 FFmpeg 对摄像头 RTSP 流进行自动转码 本文档旨在解决公司项目中遇到的问题,即将几个...本文档介绍了使用 Python 操作 FFmpeg 对摄像头 RTSP 流进行自动转码的解决方案,解决了公司项目中遇到的问题。

    使用FFMPEG+easydarwin把本地摄像头进行rtsp推流指令

    ### 使用FFMPEG+EasyDarwin进行RTSP推流详解 #### 一、FFMPEG简介及基本操作 FFMPEG是一款强大的多媒体处理工具,它能够处理多种格式的音视频文件,包括录制、转换和流化等操作。FFMPEG包含了一些核心组件,如...

    windows下python opencv ffmpeg读取摄像头实现rtsp推流 拉流

    在Windows环境下,使用Python、OpenCV以及FFmpeg处理RTSP(Real-Time Streaming Protocol)流是一项常见的任务,尤其在视频监控、直播系统等场景中。本文将深入探讨如何通过这三个工具来实现实时视频流的推流和拉流...

    Qt基于ffmpeg的rtsp视频流接收播放工具

    Qt基于ffmpeg的rtsp视频流接收播放工具是一个个人原创项目,旨在帮助开发者和爱好者学习如何在Qt环境中利用ffmpeg库处理rtsp视频流。Qt是一个跨平台的C++图形用户界面应用程序开发框架,而ffmpeg则是一个强大的开源...

Global site tag (gtag.js) - Google Analytics