通過ffmpeg實現視頻流截圖

最近忙于新產品技術點突破,針對架構摸索暫時停住。目前需要解決的問題是如何從視頻流中截取一張圖。

概況

在安防領域有各種視頻監(jiān)控產品办成,它們遵循的通訊協(xié)議也不盡相同,歸納起來主要遵循GB/T 28181搂漠、ONVIF迂卢、PSIA等協(xié)議。

GB/T 28181協(xié)議

其通信協(xié)議如下所示

通信協(xié)議結構圖.png

其視頻編碼格式主要有:MPEG-4桐汤、H.264而克、SVAC等,目前主流的視頻編碼格式是H.264怔毛。
其實時傳輸協(xié)議為RTP员萍,在此傳輸協(xié)議基礎上對視音頻數據進行封裝,其又分為PS封裝和非PS封裝:
基于RTP的PS封裝拣度,是將視音頻流封裝成PS包充活,再將PS包以負載的方式封裝成RTP包。
基于RTP的非PS封裝蜡娶,是直接將視音頻流以負載的方式封裝成RTP包。
如果對RTP協(xié)議感興趣可以參考:
RTP協(xié)議分析
RTSP/RTP/RTCP詳解整理
RTP協(xié)議全解析(H264碼流和PS流)
RTP/RTSP/RTCP有什么區(qū)別映穗?
Wireshark 抓包分析 RTSP/RTP/RTCP 基本工作過程
公司裝有一臺宇視的電警卡口抓拍機HC161智能交通600萬攝像單元窖张,可以看出該電警搭載的網絡攝像頭支持ONVIF、GB/T28181等協(xié)議蚁滋,同時查看其視頻配置
視頻配置.png

可以嘗試通過VLC連接RTSP視頻流

vlc.png

安裝ffmpeg

在CentOS7上安裝ffmpeg

yum -y install epel-release
rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm
yum search ffmpeg
yum -y install ffmpeg ffmpeg-devel
ffmpeg -version
version.png
ffmpeg -y -i rtsp://user:password@ip:port-ss 00:00:01 -vframes 1 -f image2 -vcodec png image.png
image.png

Java調用腳本

腳本正確調用宿接,接下來就通過Java調用遠程服務器上腳本實現視頻流截圖赘淮,在此借助Ganymed SSH-2 for Java,實現SSH遠程執(zhí)行腳本睦霎。

package com.dhl.runshell;

import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

/**
 * Created by daihl on 2017/10/10.
 */
public class CommandRunner {
    public static Connection getOpenedConnection(String host, String username, String password) throws IOException {
        Connection conn = new Connection(host);
        conn.connect(); // make sure the connection is opened
        boolean isAuthenticated = conn.authenticateWithPassword(username, password);
        if (isAuthenticated == false)
            throw new IOException("Authentication failed.");
        return conn;
    }

    public static String execShellScript(String host, String username,
                                         String password,
                                         String cmd, int port) throws IOException {
        Connection conn = null;
        Session sess = null;
        InputStream stdout = null;
        BufferedReader br = null;
        StringBuffer buffer = new StringBuffer("exec result:");
        buffer.append(System.getProperty("line.separator"));// 換行
        try {
            conn = getOpenedConnection(host, username, password);
            sess = conn.openSession();
            sess.execCommand(cmd);
            stdout = new StreamGobbler(sess.getStdout());
            br = new BufferedReader(new InputStreamReader(stdout));
            while (true) {
                // attention: do not comment this block, or you will hit
                // NullPointerException
                // when you are trying to read exit status
                String line = br.readLine();
                if (line == null)
                    break;
                buffer.append(line);
                buffer.append(System.getProperty("line.separator"));// 換行
            }
        } finally {
            sess.close();
            conn.close();
        }
        return buffer.toString();
    }

    public static void main(String[] args) {
        String cmd = "ffmpeg -y -i rtsp://user:password@ip:port -ss 00:00:01 -vframes 1 -f image2 -vcodec png image.png;echo end";
        try {
            String info = CommandRunner.execShellScript("ip", "user",
                    "password",cmd,22);

            System.out.println("info is:"+info);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

后繼工作

通過SSH遠程執(zhí)行腳本有點簡單粗暴梢卸,何不將這截圖功能做成服務,向外發(fā)布副女,更加靈活方便蛤高。故后期工作如下:
準備一臺圖片服務器,其主要職責有
1.圖片文件存儲
2.響應終端的抓圖請求碑幅,并將圖片保存到指定文件夾目錄下
3.響應終端的合圖請求戴陡,以上兩者做成服務的形式,終端通過分布式調用服務沟涨,完成操作并返回結果狀態(tài)
4.接收終端上傳的圖片
硬件需求:
1.因圖片服務器上安裝ffmpeg工具恤批,其需要對視頻流進行解碼,并按照png格式組織編碼裹赴,對計算性能要求高喜庞,所以CPU性能要好
2.作為圖片文件存儲服務器,存儲容量要大
3.接受多終端設備連接棋返,網口帶寬要大

后記

因為要接收反饋結果延都,cmd命令可以這樣寫

rtsp://user:password@ip:port -ss 00:00:01 -vframes 1 -f image2 -vcodec png image.png && echo succeeded ||echo failed

當ffmpeg執(zhí)行正確時,會輸出succeeded懊昨,當ffmpeg不能正確執(zhí)行時窄潭,會輸出failed

新建目錄文件夾,將截圖文件放入指定文件夾中

if [ ! -d /home/daihl/$(date +%Y%m%d) ]; then mkdir -p /home/daihl/$(date +%Y%m%d)&&echo "mkdir"; fi
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末酵颁,一起剝皮案震驚了整個濱河市嫉你,隨后出現的幾起案子,更是在濱河造成了極大的恐慌躏惋,老刑警劉巖幽污,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異簿姨,居然都是意外死亡距误,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門扁位,熙熙樓的掌柜王于貴愁眉苦臉地迎上來准潭,“玉大人,你說我怎么就攤上這事域仇⌒倘唬” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵暇务,是天一觀的道長泼掠。 經常有香客問我怔软,道長,這世上最難降的妖魔是什么择镇? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任挡逼,我火速辦了婚禮,結果婚禮上腻豌,老公的妹妹穿的比我還像新娘家坎。我一直安慰自己,他們只是感情好饲梭,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布乘盖。 她就那樣靜靜地躺著,像睡著了一般憔涉。 火紅的嫁衣襯著肌膚如雪订框。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天兜叨,我揣著相機與錄音穿扳,去河邊找鬼。 笑死国旷,一個胖子當著我的面吹牛矛物,可吹牛的內容都是我干的。 我是一名探鬼主播跪但,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼履羞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了屡久?” 一聲冷哼從身側響起忆首,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎被环,沒想到半個月后糙及,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡筛欢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年浸锨,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片版姑。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡柱搜,死狀恐怖,靈堂內的尸體忽然破棺而出剥险,到底是詐尸還是另有隱情冯凹,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站宇姚,受9級特大地震影響,放射性物質發(fā)生泄漏夫凸。R本人自食惡果不足惜浑劳,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望夭拌。 院中可真熱鬧魔熏,春花似錦、人聲如沸鸽扁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽桶现。三九已至躲雅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間骡和,已是汗流浹背相赁。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留慰于,地道東北人钮科。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像婆赠,于是被迫代替她去往敵國和親绵脯。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,504評論 25 707
  • 發(fā)現 關注 消息 iOS 第三方庫休里、插件蛆挫、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,024評論 4 62
  • Print Prime Numbers Write a query to print all prime numb...
    ux2017閱讀 936評論 0 0
  • 近來,不少家長因為幼兒園布置的“奇葩”的家庭作業(yè)而大倒苦水份帐,自制圖書璃吧、面點比賽、服裝走秀等作業(yè)花樣繁多層出不窮废境,代...
    小垃圾_6551閱讀 222評論 0 0
  • 為了學習不會困畜挨,咖啡多喝了兩杯,到了該睡的時候沒有一絲困意噩凹。深夜來臨巴元,荷爾蒙也會分泌,各種想法涌上心頭驮宴。此刻有多少...
    暖陽茶閱讀 205評論 0 1