Luar's Flash Playground:儲存視頻會議的正確做法(Server-side Record Client-side Live Stream)
新聞(101)
觀點或評論(94)
Flash書(63)
教程(73)
Design Patterns(3)
FlashCom筆記(47)
Flash Remoting筆記(27)
Flex筆記(11)
Flash Lite筆記(14)
PHP資訊(23)
Ajax筆記(9)
習作(51)
組件(17)
酷站(32)
學習資源(28)
書籍推介(15)
本站與我(91)
RSS瀏覽器
聯絡
熱愛鑽研
Ajax
ActionScript
Flash
Flash Lite
Flex
Flash Remoting
FlashCom
Director
Lingo
PHP
Multiplayer Game

搜尋
VCASMO
儲存視頻會議的正確做法(Server-side Record Client-side Live Stream) (22-01-2004)
製作視頻會議應用時,經常有客戶要求能夠同時將會議儲存下來。平時,我們會利用Netstream Object,其中一方發出一個Live Stream:

ns.publish("testStream", "live");

觀看一方則用:

ns.play("testStream", -1);

如果將Live改為Record或者Append,這個Live Stream就會同時儲存在FlashCom Application下的streams的Instance Folder裡,名稱為testStream.flv,而觀看一方繼續可以收到。雖然這個方法很簡單,但卻應付不到現實世界的要求,因為客戶希望要一個Button,控制會議有時會儲存,有時不會儲存。

很自然地,可以編寫一個Function,切換ns.publish的參數,一時用Live,一時用Append。可是,當Stream由Append(儲存)變成Live(不儲存)時,Flashcom會自動將之前儲存的FLV刪除!

解決方法一(不建議使用)

那麼用兩個NetStream Objects,ns1:負責Live Stream,發放給觀看一方;ns2:負責Append,發放給FlashCom儲存。如果要暫停儲存,可以用:

ns2.publish(false);

雖然這可以解決了參數Live會刪除FLV的問題,卻花了多一倍Bandwidth,不化算。

解決方法二

利用Server-side Stream Object,它就是FlashCom Server-side的NetStream Object,原來的作用是用來作視頻分流,可以由一個FlashCom A要求視頻流到FlashCom B,再由FlashCom B發放到Client的Flash Player裡,藉以解決FlashCom Server License上的Bandwidth限制。

這裡利用Stream Object接收Client傳來的Live Stream(testStream),然後將它另存為testRecord.flv。Client-side ActionScript如常是:

ns.publish("testStream", "live");

Server-side的main.asc:

// 儲存的名稱
this.s = Stream.get("testRecord");
// Client傳來的Live Stream的名稱
this.s.play("testStream", -1, -1);
// 開始儲存
this.s.record();
this.s.onStatus = function(info) {
    if (info.description == "testStream is now unpublished.") {
        // 當Client停止傳來時,就停止儲存
        this.play(false);
        this.record(false);
    }
}

根據FlashCom Help > Server-Side Communication ActionScript Dictionary > Server-Side Communication ActionScript > Stream.record,裡面指要停止儲存,只需要用參數false,這是錯誤的。用Communication App Inspector監測,當應用結束,仍然有一個Stream Publishing繼續執行著,因為Stream.play()沒有被停止,所以真正要停止儲存時,必須先用Stream.play(false);停止Stream Publishing,然後才用Stream.record(false);。

[範例](解壓到applications\ss_record)
本文章由發表。
意見
  • 利用Server-side Stream Object,它就是FlashCom Server-side的NetStream Object,原來的作用是用來作視頻分流,可以由一個FlashCom A要求視頻流到FlashCom B,再由FlashCom B發放到Client的Flash Player里,藉以解決FlashCom Server License上的Bandwidth限制。
    這個能解決帶寬問題?請作者詳細解釋一下!謝謝

    由dmpray於11-02-2004發表

  • 我現在就錄制了在線播放的聲音流
    但是有一個問題就是如何對生成的flv文件進行編輯,因為有些內容是不想要的,是否有工具可以編輯flv文件

    謝謝!!

    由waizi於23-03-2004發表

  • 這個功能可以把〝視訊〞錄下來,可是如果有用到電子白板,那電子白板上所做的動作,打的字,畫的圖,是否也有辦法一起錄下來呢?

    由genie於29-03-2004發表

同組文章

Movable Type 4.32-en系統支持,Luar's Production版權所有。