Java使用ffmpeg實現本地視頻的Rtsp推流
1、需要的工具
-
(1)ffmpeg,免費且強大的音視頻轉換、錄制、流化工具,此處使用版本:ffmpeg-4.2-win64-static可以直接在官網下載,http://ffmpeg.org/
-
(2)EasyDarwin,開源流媒體服務器,啟動exe直接搭建完成視頻服務器,方便測試,官網:
,點下載跳轉到github,easyDarwin下面有release包的下載

image.png
-
(3)vlc media player流媒體播放器
2、代碼
啟動EasyDarwin,彈出的窗口會有一個web頁面地址( http://127.0.0.1:10008),復制到瀏覽器即可看到實時的推拉流詳情,如上圖。
首先,我們要知道ffmpeg在cmd窗口直接將本地視頻推rtsp流時的命令(首先要跳轉到下載的ffmpeg的bin文件夾下):
ffmpeg -re -i E:\company\ffmpeg.exe_xfdown.com\abc.flv -f rtsp rtsp://127.0.0.1/test
ffmpeg:ffmpeg.exe程序,在bin文件夾下
-re:代表按照幀率發送,在推流時必須有
-i F:/video/video1.mp4:指定要推送的本地視頻
-f rtsp:指定推送格式
rtsp://127.0.0.1/test:視頻服務器接收
在啟動視頻服務器EasyDarwin后,如果直接把上面的指令在cmd輸入(進入ffmpeg的bin文件夾后),即可推送視頻流,在視頻服務器的web頁面可以看到有推流,打開vlc流媒體播放器,點擊左上角“媒體-打開網絡串流”:

輸入上面的視頻服務器拉流地址,就可以看到實時推送的視頻流,現在只需要把上面的ffmpeg推流指令在java中實現即可,java代碼具體如下:
public boolean pushVideoAsRTSP(long id, String fileName){
boolean flag = false;
// ffmpeg位置,最好寫在配置文件中
String ffmpegPath = "E:/SDE/ffmpeg/bin/";
try {
// 視頻切換時,先銷毀進程,全局變量Process process,方便進程銷毀重啟,即切換推流視頻
if(process != null){
process.destroy();
System.out.println(">>>>>>>>>>推流視頻切換<<<<<<<<<<");
}
// cmd命令拼接,注意命令中存在空格
String command = ffmpegPath; // ffmpeg位置
command += "ffmpeg -re"; // ffmpeg開頭,-re代表按照幀率發送,在推流時必須有
command += " -i " + videoPath + id + "/" + fileName; // 指定要推送的視頻
command += " -f rtsp " + rtspServer; // 指定推送服務器,-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視頻服務器,有推拉流數據:


vlc流媒體播放器:

作者:前端后台都不精
鏈接:https://www.jianshu.com/p/a4ba8ce54b31
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
