Nginx+FFmpeg 贺で樱康、大華NVR實(shí)現(xiàn)rtsp轉(zhuǎn)flv實(shí)時(shí)預(yù)覽+錄像回放

關(guān)鍵詞

支持RTSP協(xié)議的NVR翔横、攝像頭(憾刘危康、大華等主流設(shè)備廠家)
RTSP轉(zhuǎn)FLV
預(yù)覽+回放

工具準(zhǔn)備

  1. FFmpeg禾唁,推流工具
  2. Nginx效览,要想實(shí)現(xiàn)Flv還需要安裝模塊nginx-http-flv-module无切,這個(gè)模塊需要編譯,如果是linux環(huán)境很方便丐枉,如果是windows環(huán)境哆键,對(duì)不起,超級(jí)麻煩瘦锹,網(wǎng)上也有教程籍嘹,太復(fù)雜了,還好有網(wǎng)友提供了編譯好的版本弯院,csdn上下載辱士,要幣才能下載,求助萬(wàn)能的淘寶花了5毛錢(qián)下載听绳。
  3. Flv.js颂碘,網(wǎng)頁(yè)播放所需的文件,

安裝教程

參考了這位大神寫(xiě)的教程

碰到的問(wèn)題

1. nginx-http-flv-module

要想實(shí)現(xiàn)Flv還需要安裝模塊nginx-http-flv-module辫红,這個(gè)模塊需要編譯凭涂,如果是linux環(huán)境很方便,如果是windows環(huán)境贴妻,對(duì)不起,超級(jí)麻煩蝙斜,網(wǎng)上也有教程名惩,太復(fù)雜了,還好有網(wǎng)友提供了編譯好的版本孕荠,csdn上下載娩鹉,要幣才能下載,求助萬(wàn)能的淘寶花了5毛錢(qián)下載稚伍。

2. 實(shí)時(shí)預(yù)覽

FFmpeg命令格式

ffmpeg -rtsp_transport tcp -i rtsp://user:password@ip:port/Streaming/channels/101  -c copy -f flv rtmp://127.0.0.1:1935/live/mystream
參數(shù)解析
-rtsp_transport tcp: 固定寫(xiě)法
user:用戶名
password:密碼
ip:攝像頭或NVR的IP地址
port:攝像頭或NVR的RTSP端口弯予,默認(rèn)是554,具體的RTSP取流規(guī)則可以百度
-c copy: 輸出直接復(fù)制个曙,不轉(zhuǎn)換格式
-f flv:轉(zhuǎn)成flv
rtmp://127.0.0.1:1935/live/mystream:根據(jù)Nginx配置文件生成

攝像頭默認(rèn)參數(shù)配置是h264則不會(huì)報(bào)錯(cuò)锈嫩。如果出現(xiàn)如下報(bào)錯(cuò),是因?yàn)閿z像頭是h265垦搬,F(xiàn)Fmpeg是無(wú)法直接轉(zhuǎn)成flv的

[flv @ 000002b1c6a1d680] Video codec hevc not compatible with flv
Could not write header for output file #0 (incorrect codec parameters ?): Function not implemented

這種情況下需要將轉(zhuǎn)碼呼寸,將h265先轉(zhuǎn)成h264,再轉(zhuǎn)成flv猴贰,具體指令如下

ffmpeg -rtsp_transport tcp -i rtsp://user:password@ip:port/Streaming/channels/101  -c:v libx264 -f flv rtmp://127.0.0.1:1935/live/mystream

實(shí)時(shí)預(yù)覽有兩種播放選擇:

  • 直接使用子碼流播放对雪,就不需要再進(jìn)行h264的轉(zhuǎn)換,這樣的響應(yīng)速度會(huì)更快米绕,但是畫(huà)質(zhì)會(huì)差點(diǎn)瑟捣;
  • 用主碼流播放則需要進(jìn)行h264的轉(zhuǎn)換馋艺,響應(yīng)速度會(huì)慢2、3秒迈套,畫(huà)質(zhì)不影響

3. 錄像回放

正常的RTSP取流規(guī)則如下:

rtsp://user:password@ip:port/Streaming/tracks/101?starttime=20200422t093812z&endtime=20200422t101003z

根據(jù)實(shí)時(shí)回放的FFmpeg規(guī)則捐祠,很容易想到將錄像rtsp取流的url放到指令中

ffmpeg -rtsp_transport tcp -i rtsp://user:password@ip:port/Streaming/tracks/101?starttime=20200422t093812z&endtime=20200422t101003z  -c copy -f flv rtmp://127.0.0.1:1935/live/mystream

直接在命令行中輸入回車,會(huì)出現(xiàn)如下
問(wèn)題1:

[tcp @ 00000216b1c116c0] Port missing in uri
rtsp://user:password@ip:port/Streaming/tracks/101?starttime=20200422t093812z: Invalid argument
'endtime' 不是內(nèi)部或外部命令交汤,也不是可運(yùn)行的程序
或批處理文件雏赦。

去掉rtsp取流url中的‘&endtime=20200422t101003z’,至于沒(méi)有了結(jié)束時(shí)間怎么停止播放目前未找到好辦法芙扎。

ffmpeg -rtsp_transport tcp -i rtsp://user:password@ip:port/Streaming/tracks/101?starttime=20200422t093812z  -c copy -f flv rtmp://127.0.0.1:1935/live/mystream

再次報(bào)錯(cuò)
問(wèn)題2:

[flv @ 000001f285f01bc0] Video codec hevc not compatible with flv
Could not write header for output file #0 (incorrect codec parameters ?): Function not implemented

這次出現(xiàn)的報(bào)錯(cuò)和實(shí)時(shí)預(yù)覽中的一樣星岗,是因?yàn)閿z像頭h265的原因,不同的是實(shí)時(shí)預(yù)覽可以選擇子碼流播放不轉(zhuǎn)碼戒洼,但是回放中只要主碼流俏橘,所以只能進(jìn)行轉(zhuǎn)碼操作

ffmpeg -rtsp_transport tcp -i rtsp://user:password@ip:port/Streaming/tracks/101?starttime=20200422t093812z  -c:v libx264 -f flv rtmp://127.0.0.1:1935/live/mystream

在命令行中輸入回車,會(huì)出現(xiàn)如下
問(wèn)題3:

Input #0, rtsp, from 'rtsp://WSdun:WSdun@123@172.16.2.200:554/Streaming/tracks/201?starttime=20200422t093812z':
  Metadata:
    title           : HIK Media Server V3.4.93
    comment         : HIK Media Server Session Description : standard
  Duration: -187967:-4:-22.-32, start: 0.040000, bitrate: N/A
    Stream #0:0: Video: hevc (Main), yuvj420p(pc, bt709), 1920x1080, 25 fps, 25 tbr, 90k tbn, 90k tbc
    Stream #0:1: Audio: none, 16000 Hz, mono
Stream mapping:
  Stream #0:0 -> #0:0 (hevc (native) -> h264 (libx264))
  Stream #0:1 -> #0:1 (? (?) -> mp3 (libmp3lame))
Decoder (codec none) not found for input stream #0:1

通過(guò)rtsp回放拉流的話會(huì)同時(shí)拉取2個(gè)流音頻流圈浇、視頻流寥掐,就是上面中出現(xiàn)的Stream #0:0Stram #0:1,上面的報(bào)錯(cuò)是找不到音頻流的編碼方式磷蜀,無(wú)法解碼召耘,實(shí)時(shí)預(yù)覽拉流只會(huì)拉取視頻流所以不會(huì)報(bào)錯(cuò)。通過(guò)查看FFmpeg的參數(shù)發(fā)現(xiàn)有個(gè)參數(shù)-an表示去除音頻褐隆,將它放入到指令中

ffmpeg -rtsp_transport tcp -i rtsp://user:password@ip:port/Streaming/tracks/101?starttime=20200422t093812z  -c:v libx264 -an -f flv rtmp://127.0.0.1:1935/live/mystream

OK污它,能夠正常播放錄像拉。但是到這里還不是最完美的解決了問(wèn)題庶弃,你肯定發(fā)現(xiàn)播放速度非常慢衫贬,從輸入ffmpeg指令到flv輸出至少要等6~8秒。再問(wèn)題3中歇攻,除了直接報(bào)錯(cuò)不能運(yùn)行了外固惯,其實(shí)在控制臺(tái)上方還有個(gè)告警

[rtsp @ 000001d6cf7108c0] Could not find codec parameters for stream 1 (Audio: none, 16000 Hz, 1 channels): unknown codec
Consider increasing the value for the 'analyzeduration' and 'probesize' options
Guessed Channel Layout for Input Stream #0.1 : mono

還是問(wèn)題3中提到的找不到音頻參數(shù)。FFmpeg拉流的時(shí)候會(huì)檢查視頻流參數(shù)和音頻流參數(shù)缴守,視頻流參數(shù)一直找不到葬毫,這中間有個(gè)超時(shí)時(shí)間。當(dāng)時(shí)能想到的是能不能在拉流的時(shí)候和實(shí)施預(yù)覽一樣只拉視頻流斧散,通過(guò)度娘查找了一拳供常,找到了這個(gè)參數(shù)-allowed_media_types video(只取音頻流的話就填audio),將它代入指令中鸡捐,這時(shí)候可以去掉-an參數(shù)栈暇,沒(méi)有音頻流也就沒(méi)有所謂的去除音頻

ffmpeg -rtsp_transport tcp -i rtsp://user:password@ip:port/Streaming/tracks/101?starttime=20200422t093812z  -c:v libx264 -f flv rtmp://127.0.0.1:1935/live/mystream

這下算是完美了。錄像回放速度就和視頻預(yù)覽一樣了箍镜。

FFmpeg的指令太多太多源祈,還需要細(xì)品

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末煎源,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子香缺,更是在濱河造成了極大的恐慌手销,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件图张,死亡現(xiàn)場(chǎng)離奇詭異锋拖,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)祸轮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)兽埃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人适袜,你說(shuō)我怎么就攤上這事柄错。” “怎么了苦酱?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵售貌,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我疫萤,道長(zhǎng)颂跨,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任扯饶,我火速辦了婚禮毫捣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘帝际。我一直安慰自己,他們只是感情好饶辙,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布蹲诀。 她就那樣靜靜地躺著,像睡著了一般弃揽。 火紅的嫁衣襯著肌膚如雪脯爪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天矿微,我揣著相機(jī)與錄音痕慢,去河邊找鬼。 笑死涌矢,一個(gè)胖子當(dāng)著我的面吹牛掖举,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播娜庇,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼塔次,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼方篮!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起励负,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤藕溅,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后继榆,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體巾表,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年略吨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了集币。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡晋南,死狀恐怖惠猿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情负间,我是刑警寧澤偶妖,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站政溃,受9級(jí)特大地震影響趾访,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜董虱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一扼鞋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧愤诱,春花似錦云头、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至科吭,卻和暖如春昏滴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背对人。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工谣殊, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人牺弄。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓姻几,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鲜棠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容