国产精品久久久久久2021,日韩精品无码av中文无码版,亚洲精品久久久午夜麻豆,无码成人精品日本动漫纯h

010-68421378
當前您所在的位置:首頁>新聞中心>新品發(fā)布

如何從Wowza transcoder獲得實時流的視頻截圖?

發(fā)布時間:2020/11/15 瀏覽量:3505
從Wowza Transcoder 插件獲得視頻截圖

這篇文章介紹了兩種方法用于從Wowza Transcoder 插件獲得視頻截圖。要讓這功能正常工作,Wowza Transcoder 必須處于正常運行狀態(tài)并正在對一個視頻流進行轉(zhuǎn)碼。 

注意: 這個功能要求Wowza Media Server® 3.0.0及更高版本。

 

 

一、HTTP Provider


你可以用一個已經(jīng)內(nèi)建的,位于管理端口8086上的HTTP接口來從正在運行中的Wowza transcoder獲得一個位圖。Http URL格式如下: 

http://[wowza-ip-address]:8086/transcoderthumbnail?application=[application-name]&streamname=[stream-name]&format=[jpegor png]&size=[widthxheight]

其中: 


要使用這個HTTP服務(wù),請用文本編輯器打開[install-dir]/conf/VHost.xml文件,將com.wowza.wms.transcoder.httpprovider.HTTPTranscoderThumbnail 中的 AuthenticationMethod 設(shè)置為: none。這樣將關(guān)閉基于用戶名和密碼的認證。 

接下來, 對Wowza Server進行配置,以對一個輸入流進行轉(zhuǎn)碼。

在下面的例子中, 假定我們要轉(zhuǎn)碼的流為myStream,應(yīng)用名為live. 要獲得這個實時流的當前截圖,請在WEB瀏覽器上訪問以下URL:

http://[wowza-ip-address]:8086/transcoderthumbnail?application=live&streamname=myStream&format=jpeg&size=320x240

注意: 這個URL是區(qū)分大小寫的。

 

日志 
每一次請求截圖時,你都會在[install-dir]/logs/wowzamediaserver_access.log中看到一個log消息:

commentserver       INFO         200  -        HTTPTranscoderThumbnail#GrabResult.onGrabFrame[live/_definst_/myStream]:Image result: format:jpeg size:320x240 timecode:107633

 

二、服務(wù)端 API
下面是一段代碼例子,建立了莪一個名為grabFrame([stream-name])的方法,可供遠程調(diào)用,獲得實時流的當前截圖: 

package com.wowza.wms.plugin.test.module;

 

import java.awt.image.*;

import javax.imageio.*;

import java.io.*;

import com.wowza.wms.amf.*;

import com.wowza.wms.client.*;

import com.wowza.wms.request.*;

import com.wowza.wms.module.*;

import com.wowza.wms.application.*;

import com.wowza.wms.stream.*;

import com.wowza.wms.transcoder.model.*;

import com.wowza.wms.transcoder.util.*;

 

public class ModuleTestTranscoderFrameGrabextends ModuleBase

{

         privateIApplicationInstance appInstance = null;

        

         classGrabResult implements ITranscoderFrameGrabResult

         {

                   publicvoid onGrabFrame(TranscoderNativeVideoFrame videoFrame)

                   {                          

                            BufferedImageimage = TranscoderStreamUtils.nativeImageToBufferedImage(videoFrame);

                            if(image != null)

                            {

                           

                                     getLogger().info("ModuleTestTranscoderFrameGrab#GrabResult.onGrabFrame:"+image.getWidth()+"x"+image.getHeight());

                                    

                                     StringstorageDir = appInstance.getStreamStoragePath();

                                    

                                     FilepngFile = new File(storageDir+"/thumbnail.png");

                                     FilejpgFile = new File(storageDir+"/thumbnail.jpg");

                                    

                                     try

                                     {

                                              if (pngFile.exists())

                                                        pngFile.delete();

                                               ImageIO.write(image,"png", pngFile);

                                               getLogger().info("ModuleTestTranscoderFrameGrab#GrabResult.onGrabFrame:Save image: "+pngFile);

                                     }

                                     catch(Exceptione)

                                     {

                                               getLogger().error("ModuleTestTranscoderFrameGrab.grabFrame:File write error: "+pngFile);

                                     }

                                    

                                     try

                                     {

                                               if(jpgFile.exists())

                                                        jpgFile.delete();

                                               ImageIO.write(image,"jpg", jpgFile);

                                               getLogger().info("ModuleTestTranscoderFrameGrab#GrabResult.onGrabFrame:Save image: "+jpgFile);

                                     }

                                     catch(Exceptione)

                                     {

                                               getLogger().error("ModuleTestTranscoderFrameGrab.grabFrame:File write error: "+jpgFile);

                                     }

                            }

                   }

         }

        

         publicvoid onAppStart(IApplicationInstance appInstance)

         {

                   getLogger().info("ModuleTestTranscoderFrameGrab.onAppStart["+appInstance.getContextStr()+"]");

                   this.appInstance= appInstance;

         }

        

         publicvoid grabFrame(IClient client, RequestFunction function, AMFDataList params)

         {

                   getLogger().info("ModuleTestTranscoderFrameGrab.grabFrame");

 

                   while(true)

                   {

                            StringstreamName = params.getString(PARAM1);

                            if(streamName == null)

                            {

                                     getLogger().warn("ModuleTestTranscoderFrameGrab.grabFrame:No streamName");

                                     break;

                            }

                           

                            IApplicationInstanceappInstance = client.getAppInstance();

                            if(appInstance == null)

                            {

                                     getLogger().warn("ModuleTestTranscoderFrameGrab.grabFrame:No appInstance");

                                     break;

                            }

                           

                            IMediaStreamstream = appInstance.getStreams().getStream(streamName);

                            if(stream == null)

                            {

                                     getLogger().warn("ModuleTestTranscoderFrameGrab.grabFrame:No stream");

                                     break;

                            }

                           

                            LiveStreamTranscoderliveStreamTranscoder =(LiveStreamTranscoder)stream.getLiveStreamTranscoder("transcoder");

                            if(liveStreamTranscoder == null)

                            {

                                     getLogger().warn("ModuleTestTranscoderFrameGrab.grabFrame:No liveStreamTranscoder");

                                     break;

                            }

                           

                            TranscoderStreamtranscodingStream = liveStreamTranscoder.getTranscodingStream();

                            if(transcodingStream == null)

                            {

                                     getLogger().warn("ModuleTestTranscoderFrameGrab.grabFrame:No transcodingStream");

                                     break;

                            }

                           

                            TranscoderStreamSourceVideosourceVideo = transcodingStream.getSource().getVideo();

                            if(sourceVideo == null)

                            {

                                     getLogger().warn("ModuleTestTranscoderFrameGrab.grabFrame:No sourceVideo");

                                     break;

                            }

                           

                            getLogger().info("ModuleTestTranscoderFrameGrab.grabFrame:Call grabFrame");

                            sourceVideo.grabFrame(newGrabResult(), 426, 240);

                            break;

                   }

         }

}

 

要在Flash應(yīng)用中調(diào)用這個方法, 先用RTMP連接到Wowza Media Server,然后用下面的方式調(diào)用: 

nc.call(grabFrame, null,"[stream-name]");

其中 [stream-name] 就是你要獲得截圖的實時流的名字. 

 

Wowza Streaming Engine 4是業(yè)界功能強大、API接口豐富的流媒體Server產(chǎn)品,采用它作為流媒體服務(wù)器產(chǎn)品的案例很多,直播、在線教育、IPTV都有它的用武之地。

下一篇:TeamViewer IoT 遠程報警解決方案:遠程監(jiān)控,設(shè)置警報并觸發(fā)自動操作
上一篇:Kendo UI for jQuery數(shù)據(jù)管理使用教程:多列標題/列菜單等

                               

 京ICP備09015132號-996 | 違法和不良信息舉報電話:4006561155

                                   © Copyright 2000-2026 北京哲想軟件有限公司版權(quán)所有 | 地址:北京市海淀區(qū)西三環(huán)北路50號豪柏大廈C2座11層1105室

                         北京哲想軟件集團旗下網(wǎng)站:哲想軟件 | 哲想動畫

                            華滋生物