首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JMF 視訊播放入門(一):Player 生命週期與 Applet 整合完整範例

     編輯:Java 相關知識

Java Media Framework (JMF) 播放視訊的核心流程:建立 MediaLocator → Manager.createPlayer() → 註冊 ControllerListener → start() 播放 → 狀態達 Realized 時取得視覺/控制元件加入容器 → 停止/釋放/關閉資源。本文詳細說明各步驟並提供可直接執行的 Applet 完整代碼。

播放流程七步驟

  1. 確定媒體位置:MediaLocator mrl = new MediaLocator("file:/path/video.mp4");
  2. 建立 Player:Player player = Manager.createPlayer(mrl);
  3. 註冊控制器監聽器:player.addControllerListener(this); — 監聽 RealizeCompleteEvent 等事件。
  4. 啟動播放:player.start();
  5. 停止播放:player.stop();
  6. 釋放獨佔資源:player.deallocate(); — 釋放解碼器、音訊裝置等稀缺資源,避免衝突。
  7. 關閉釋放所有資源:player.close();

關鍵觀念補充

  • controllerUpdate() 回調中處理 RealizeCompleteEvent,才能安全取得 getVisualComponent()、getControlPanelComponent() 加入 UI 容器。
  • Player 狀態機:Unrealized → Realizing → Realized → Prefetching → Prefetched → Started。
  • 視覺元件 (VisualComponent) 與控制面板 (ControlPanelComponent) 僅在 Realized 狀態後可用。

完整 Applet 範例代碼

import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Component;
import javax.media.ControllerEvent;
import javax.media.ControllerListener;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.Player;
import javax.media.RealizeCompleteEvent;

public class PlayerApplet extends Applet implements ControllerListener {
    private static final long serialVersionUID = 1L;
    private Player player = null;

    public void init() {
        setLayout(new BorderLayout());
        // 實際部署時請替換為有效媒體 URL
        MediaLocator mrl = new MediaLocator("https://example.com/video.mp4");
        try {
            player = Manager.createPlayer(mrl);
            player.addControllerListener(this);
        } catch (Exception e) {
            System.err.println("Got exception: " + e);
        }
    }

    public void start() { if (player != null) player.start(); }
    public void stop()  { if (player != null) { player.stop(); player.deallocate(); } }
    public void destroy() { if (player != null) player.close(); }

    public synchronized void controllerUpdate(ControllerEvent event) {
        if (event instanceof RealizeCompleteEvent) {
            Component comp;
            if ((comp = player.getVisualComponent()) != null) add("Center", comp);
            if ((comp = player.getControlPanelComponent()) != null) add("South", comp);
            validate();
        }
    }
}

部署與測試要點

  1. 媒體 URL:支援 file:、http:、rtsp: 等協議,確保格式為 JMF 支援編碼(MPEG-1, H.263, JPEG 等)。
  2. 簽署 Applet:存取本地檔案或網路需簽署 JAR 並配置 policy 檔案。
  3. JMF 執行環境:客戶端需安裝 JMF 2.1.1e 或更新版本,並註冊 jmf.jar 至擴充目錄或類別路徑。
  4. 瀏覽器相容性:現代瀏覽器已棄用 Applet,建議遷移至 Java Web Start 或獨立應用程式架構。

常見問題排查

現象可能原因解決方向
無畫面、無聲音編碼格式不支援、缺少解碼器外掛安裝 JMF 擴充包、轉碼為 MPEG-1/H.263
RealizeCompleteEvent 未觸發媒體 URL 錯誤、網路不通、格式無法解析檢查 URL、網路、嘗試本地檔案測試
視覺元件為 null純音訊媒體、或 Realized 前嘗試取得確認事件處理順序、僅在 RealizeCompleteEvent 取得

總結

JMF 播放視訊核心在於 Player 狀態機管理與 ControllerListener 事件驅動 UI 組裝。掌握 Realized 狀態下取得視覺/控制元件的時機,即可構建穩定的播放器元件。現代專案建議改用 JavaFX MediaPlayer 或 VLCJ 等更活躍的多媒體框架。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved