(注意:如遇各種問題請先參考評論區(qū)各位大佬的解答=瞪浸。=)
(注意:另外我這個是做的攝像頭推流儒将,所以沒有做關(guān)閉流=。=)
1对蒲、需要的工具
- (1)ffmpeg钩蚊,免費且強大的音視頻轉(zhuǎn)換、錄制蹈矮、流化工具砰逻,此處使用版本:ffmpeg-4.2-win64-static可以直接在官網(wǎng)下載,http://ffmpeg.org/
- (2)EasyDarwin含滴,開源流媒體服務(wù)器诱渤,啟動exe直接搭建完成視頻服務(wù)器,方便測試谈况,官網(wǎng):http://www.easydarwin.org/勺美,點下載跳轉(zhuǎn)到github,easyDarwin下面有release包的下載
- (3)vlc media player流媒體播放器
2碑韵、代碼
啟動EasyDarwin赡茸,彈出的窗口會有一個web頁面地址( http://127.0.0.1:10008),復制到瀏覽器即可看到實時的推拉流詳情祝闻,如上圖占卧。
首先,我們要知道ffmpeg在cmd窗口直接將本地視頻推rtsp流時的命令(首先要跳轉(zhuǎn)到下載的ffmpeg的bin文件夾下):
ffmpeg -re -i F:/video/video1.mp4 -f rtsp rtsp://127.0.0.1/test
- ffmpeg:ffmpeg.exe程序联喘,在bin文件夾下
- -re:代表按照幀率發(fā)送华蜒,在推流時必須有
- -i F:/video/video1.mp4:指定要推送的本地視頻
- -f rtsp:指定推送格式
-
rtsp://127.0.0.1/test:視頻服務(wù)器接收
在啟動視頻服務(wù)器EasyDarwin后,如果直接把上面的指令在cmd輸入(進入ffmpeg的bin文件夾后)豁遭,即可推送視頻流叭喜,在視頻服務(wù)器的web頁面可以看到有推流,打開vlc流媒體播放器蓖谢,點擊左上角“媒體-打開網(wǎng)絡(luò)串流”:
輸入上面的視頻服務(wù)器拉流地址捂蕴,就可以看到實時推送的視頻流譬涡,現(xiàn)在只需要把上面的ffmpeg推流指令在java中實現(xiàn)即可,java代碼具體如下:
// 定義一個全局變量process啥辨,方便切換推流視頻時進程重啟
public Process process;
public boolean pushVideoAsRTSP(long id, String fileName){
boolean flag = false;
// ffmpeg位置涡匀,最好寫在配置文件中
String ffmpegPath = "E:/SDE/ffmpeg/bin/";
try {
// 視頻切換時,先銷毀已有進程
if(process != null){
process.destroy();
System.out.println(">>>>>>>>>>推流視頻切換<<<<<<<<<<");
}
// cmd命令拼接溉知,注意命令中存在空格
String command = ffmpegPath; // ffmpeg位置
command += "ffmpeg -re"; // ffmpeg開頭陨瘩,-re代表按照幀率發(fā)送,在推流時必須有
command += " -i " + videoPath + id + "/" + fileName; // 指定要推送的視頻
command += " -f rtsp " + rtspServer; // 指定推送服務(wù)器着倾,-f:指定格式
System.out.println("ffmpeg推流命令:" + command);
// 運行cmd命令拾酝,獲取其進程
process = Runtime.getRuntime().exec(command);
// 輸出ffmpeg推流日志
BufferedReader br= new BufferedReader(new InputStreamReader(process.getErrorStream()));
String line = "";
while ((line = br.readLine()) != null) {
System.out.println("視頻推流信息[" + line + "]");
}
flag = process.waitFor();
}catch (Exception e){
e.printStackTrace();
}
return flag;
}
3、最終效果
控制臺:
EasyDarwin視頻服務(wù)器卡者,有推拉流數(shù)據(jù):
vlc流媒體播放器: