使用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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM