環(huán)境
- Unity 2020.3.25f1
- ffmpeg-5.0.1-full_build.zip
- NexPlayer - Video Streaming Player with DRM (Free Demo)
- Python 3.7.9
1、視頻流
這里用ffmpeg-5.0版本瞧甩,將rtsp視頻流轉(zhuǎn)換為hls格式的m3u8列表
網(wǎng)上找的可用rtsp視頻地址:rtsp://admin:12345@183.167.229.111:554/Streaming/Channels/102/?transportmode=unicast
ffmpeg -re -i rtsp://admin:12345@183.167.229.111:554/Streaming/Channels/102/?transportmode=unicast -c copy -f hls -hls_flags delete_segments -hls_time 1 -hls_list_size 5 -hls_segment_filename cache\live%05d.ts cache\live.m3u8
上面的命令帮寻,將rtsp視頻轉(zhuǎn)碼為hls并存儲(chǔ)到本地的cache目錄下
Python用途只是提供一個(gè)簡(jiǎn)單的http服務(wù)器,可以通過(guò)http協(xié)議訪問(wèn)到轉(zhuǎn)碼生成的m3u8文件
# 先將目錄切換到存儲(chǔ)m3u8的cache目錄下决瞳,啟動(dòng)Http服務(wù)器綁定8080端口
python -m http.server 8080
服務(wù)啟動(dòng)后,可通過(guò) http://127.0.0.1:8080/live.m3u8 訪問(wèn)到視頻
2左权、Unity播放視頻
在Canvas下創(chuàng)建一個(gè)RawImage組件皮胡,綁定到Nex Player Render Controller組件上。然后按上圖框出的選項(xiàng)設(shè)置赏迟,Play即可播放實(shí)時(shí)視頻屡贺。
3、用本地?cái)z像頭提供視頻流
:: 攝像頭推流
ffmpeg -f dshow -i video="USB2.0 PC CAMERA" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f flv
:: 從本地?cái)z像頭產(chǎn)生HLS視頻流
ffmpeg -f dshow -i video="HP Wide Vision HD Camera" -vcodec libx264 -preset:v ultrafast -f hls -hls_flags delete_segments -hls_time 0.1 -hls_list_size 5 -hls_segment_filename cache\live%05d.ts cache\live.m3u8
??開(kāi)始結(jié)合"攝像頭推流"跟上面“rtsp轉(zhuǎn)碼”的命令,確實(shí)生成了從攝像頭的來(lái)的HLS視頻流烹笔。但在Unity中訪問(wèn)時(shí)引擎卡死了I殉丁!谤职!用PotPlayer確認(rèn)得到的m3u8文件沒(méi)有問(wèn)題饰豺,只能懷疑視頻編碼上存在差異。
??還是借助PotPlayer來(lái)對(duì)比編碼信息允蜈,發(fā)現(xiàn)視頻像素格式有差異冤吨。本地?cái)z像頭錄制出來(lái)的是 yuvj224p
,而從遠(yuǎn)程rtsp拿到的是 NV12
饶套。
??于是在轉(zhuǎn)碼過(guò)程中加上對(duì)NV12的支持 -pix_fmt nv12
最終測(cè)試通過(guò)~~
:: 最終命令
ffmpeg -f dshow -i video="HP Wide Vision HD Camera" -vcodec libx264 -preset:v ultrafast -pix_fmt nv12 -f hls -hls_flags delete_segments -hls_time 0.1 -hls_list_size 5 -hls_segment_filename cache\live%05d.ts cache\live.m3u8