<-- IE錯誤修正 --> 使用 Adobe AIR 建立 RTMP Proxy - RiS社群 | FileMaker 跨平台企業應用



快速發表主題
返回   RiS社群 | FileMaker 跨平台企業應用 > Adobe (奧多比) > Flash > Adobe Media Server

Adobe Media Server Flash Media Server 影音串流全線產品改名為Adobe Media Server,簡稱AMS並且從第5版開始。目標要在所有裝置上可以安全地用DRM技術播放影音串流。(自2012/10/8發表)
Adobe Media Server簡介
Adobe Media Server最新試用下載


FileMaker 教學 FileMaker 14 教學課程 FileMaker 教學
FileMaker 課程(僅接受公司/單位或1對1專屬教學

輕鬆學會FileMaker
帶你認識FileMaker

FileMaker俱樂部 加入FileMaker獲取官方資訊 FileMaker俱樂部
FileMaker俱樂部

回覆
 
LinkBack 主題工具 顯示模式
  #1 (permalink)  
舊 2010-06-17
qop qop 目前離線
進階會員
 
註冊日期: 2007-10-18
住址: 台灣/台北
文章: 118
微笑 使用 Adobe AIR 建立 RTMP Proxy

在此使用 Adobe AIR 建立 RTMP Proxy 的目的是去查看 RTMP 傳送的內容。雖然 Adobe 已經釋出 RTMP Specification,但是在 Flash Player 10.0.32.18 後還是有變動()。
注意事項:
A) Fla 檔記得使用 Flash CS5 開 AIR 2。
B) 在桌面建立個空的 rtmp_proxy 目錄,用來存放執行時的資料存檔。
C) 在 Flash Media Server,開個名為「test」的 Application,並啟動 Server。
D) 先執行 RTMPProxy 再執行 VideoTest,
E) 跑一下子就關掉 VideoTest,否則檔案會越來越多,硬碟可能會爆。

以下是 兩個 Document Classes 的內容,Fla 就不附了:

RTMPProxy.as
package {
import flash.display.MovieClip;
import fl.controls.TextArea;
import flash.net.ServerSocket;
import flash.net.Socket;
import flash.events.ServerSocketConnectEvent;
import flash.events.ProgressEvent;
import flash.utils.ByteArray;
import flash.events.Event;
import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;
import flash.utils.getTimer;

public class RTMPProxy extends MovieClip {
public var info_txt:TextArea;
private var server:ServerSocket;
private var forClient:Socket;
private var forServer:Socket;
private var file:File;
private var fileStream:FileStream;
private var count:int;

public function RTMPProxy() {
info_txt.text = "";
server = new ServerSocket();
server.addEventListener(ServerSocketConnectEvent.CONNECT, connectHandler);
server.bind( 1936 );
server.listen();
}

private function connectHandler(event:ServerSocketConnectEvent):void {
forClient = event.socket;
forClient.addEventListener(ProgressEvent.SOCKET_DATA, clientDataHandler);
forClient.addEventListener(Event.CLOSE, closeHandler);
forServer = new Socket('localhost',1935);
forServer.addEventListener(ProgressEvent.SOCKET_DATA, serverDataHandler);
}

private function clientDataHandler(event:ProgressEvent):void {
count++;
var ba:ByteArray = new ByteArray();
forClient.readBytes( ba );
forServer.writeBytes( ba );

file = File.desktopDirectory.resolvePath("rtmp_proxy/proxy_" + count + "_c.data");
fileStream = new FileStream();
fileStream.open(file, FileMode.WRITE);
fileStream.writeBytes( ba );
fileStream.close();
info_txt.appendText("\n proxy_client:"+ba.length );
forServer.flush();
}

private function serverDataHandler(event:ProgressEvent):void {
count++;
var ba:ByteArray = new ByteArray();
forServer.readBytes( ba );
forClient.writeBytes( ba );

file = File.desktopDirectory.resolvePath("rtmp_proxy/proxy_" + count + "_s.data");
fileStream = new FileStream();
fileStream.open(file, FileMode.WRITE);
fileStream.writeBytes( ba );
fileStream.close();
info_txt.appendText("\n proxy_server:"+ba.length );
forClient.flush();
}

private function closeHandler(event:Event):void {
info_txt.appendText("\n client_close" );
forServer.close();
}
}
}VideoTest.as (客戶端)
package {
import flash.display.MovieClip;
import flash.media.Video;
import flash.media.Camera;
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.display.SimpleButton;
import flash.events.MouseEvent;
import flash.events.NetStatusEvent;
import flash.events.Event;
import flash.events.AsyncErrorEvent;
import flash.events.IOErrorEvent;
import flash.events.SecurityErrorEvent;
import com.adobe.serialization.json.JSON;

public class VideoTest extends MovieClip {
public var video:Video;
public var camera:Camera;
public var btn:SimpleButton;
private var connection:NetConnection;
private var stream:NetStream;

public function VideoTest() {
connection = new NetConnection();
connection.addEventListener(NetStatusEvent.NET_STATUS, statusHandler);
connection.connect("rtmp://localhost:1936/test/");

video = new Video();
camera = Camera.getCamera();
video.width = camera.width;
video.height = camera.height;
this.addChild( video );
video.attachCamera( camera );
btn.addEventListener(MouseEvent.CLICK, clickHandler);
}

private function clickHandler(event:MouseEvent):void {
stream = new NetStream(connection);
stream.attachCamera( camera );
stream.publish("lin");
}

private function statusHandler(event:Event):void {
trace( event.toString() );
trace( JSON.encode( event['info'] ) );
trace('connection.connected:'+connection.connected);
}
}
}Click the image to open in full size.


本篇來源...

回覆時引用此篇文章
回覆

主題工具
顯示模式

發表文章規則
不允許您發表新主題
不允許您發表文章
不允許您上傳附件
不允許您編輯自已的文章

開啟 BB 代碼
關閉 HTML 程式碼
Trackbacks are 關閉
Pingbacks are 關閉
Refbacks are 開啟



所有時間均為 +8。現在的時間是 08:56 AM
Powered by vBulletin® 版本 3.7.2
版權所有 ©2000 - 2019,Jelsoft Enterprises Ltd.
Advertisement System V2.6 By   Branden
RiS 社群 ( 感謝明易資訊有限公司技術指導 ) - 使用3.7.2永久合法版權。
Ad Management by RedTyger



Content Relevant URLs by vBSEO 3.6.0 PL2