码迷,mamicode.com
首页 > 其他好文 > 详细

使用ffmpeg向crtmpserver发布rtsp流

时间:2014-08-12 00:28:33      阅读:257      评论:0      收藏:0      [点我收藏+]

标签:blog   使用   io   文件   for   ar   问题   div   

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向crtmpserver发布rtsp流,布布扣,bubuko.com

使用ffmpeg向crtmpserver发布rtsp流

标签:blog   使用   io   文件   for   ar   问题   div   

原文地址:http://www.cnblogs.com/lidabo/p/3906066.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!