Java使用ffmpeg實現本地視頻的Rtsp推流


Java使用ffmpeg實現本地視頻的Rtsp推流

1、需要的工具

  • (1)ffmpeg,免費且強大的音視頻轉換、錄制、流化工具,此處使用版本:ffmpeg-4.2-win64-static可以直接在官網下載,http://ffmpeg.org/

  • (2)EasyDarwin,開源流媒體服務器,啟動exe直接搭建完成視頻服務器,方便測試,官網:

    http://www.easydarwin.org/

    ,點下載跳轉到github,easyDarwin下面有release包的下載

    img

    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
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

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



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