使用JMF实现java写自己的视频播放器

2023-05-16

    JMF这个多媒体开发框架太牛了,简单的几句代码就能实现一个视频播放器的开发,厉害,就是支持的格式少了一些,没关系,这个视频播放器可以播放mpg,avi,fvl等等,想播放其他的请开发自己的插件,下面将代码贴上去

     

package com.bird.jmf;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import javax.media.CannotRealizeException;
import javax.media.ControllerEvent;
import javax.media.ControllerListener;
import javax.media.EndOfMediaEvent;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.NoPlayerException;
import javax.media.Player;
import javax.media.PrefetchCompleteEvent;
import javax.media.RealizeCompleteEvent;
import javax.media.Time;

@SuppressWarnings({ "restriction", "unused" })
public class JMFSample implements ControllerListener {
    public static void main(String[] args) {
        JMFSample sp = new JMFSample();
        sp.play();
    }
   
    private Player mediaPlayer;
    private Frame f;
    private Player player;
    private Panel panel;
    private Component visual;
    private Component control = null;
   
    public void play(){
        f = new Frame("JMF Sample1");
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent we) {
                if(player != null) {
                    player.close();
                }
                System.exit(0);
            }
        });
        f.setSize(500,400);

        f.setVisible(true);
        URL url = null;
        try {
            //准备一个要播放的视频文件的URL
            url = new URL("file:/d:/2.mpg");
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }       
        try {
            //通过调用Manager的createPlayer方法来创建一个Player的对象
            //这个对象是媒体播放的核心控制对象
            player = Manager.createPlayer(url);
        } catch (NoPlayerException e1) {
            e1.printStackTrace();
        } catch (IOException e1) {
            e1.printStackTrace();
        } 

        //对player对象注册监听器,能噶偶在相关事件发生的时候执行相关的动作
        player.addControllerListener(this);
       
        //让player对象进行相关的资源分配
        player.realize();
    }
   
    private int videoWidth = 0;
    private int videoHeight = 0;
    private int controlHeight = 30;
    private int insetWidth = 10;
    private int insetHeight = 30;
   
    //监听player的相关事件
    public void controllerUpdate(ControllerEvent ce) {
        if (ce instanceof RealizeCompleteEvent) {
            //player实例化完成后进行player播放前预处理
            player.prefetch();
        } else if (ce instanceof PrefetchCompleteEvent) {
            if (visual != null)
                return;

            //取得player中的播放视频的组件,并得到视频窗口的大小
            //然后把视频窗口的组件添加到Frame窗口中,
            if ((visual = player.getVisualComponent()) != null) {
                Dimension size = visual.getPreferredSize();
                videoWidth = size.width;
                videoHeight = size.height;
                f.add(visual);
            } else {
                videoWidth = 320;
            }
           
            //取得player中的视频播放控制条组件,并把该组件添加到Frame窗口中
            if ((control = player.getControlPanelComponent()) != null) {
                controlHeight = control.getPreferredSize().height;
                f.add(control, BorderLayout.SOUTH);
            }
           
            //设定Frame窗口的大小,使得满足视频文件的默认大小
            f.setSize(videoWidth + insetWidth, videoHeight + controlHeight + insetHeight);
            f.validate();
           
            //启动视频播放组件开始播放
            player.start();
            mediaPlayer.start();
        } else if (ce instanceof EndOfMediaEvent) {
            //当播放视频完成后,把时间进度条恢复到开始,并再次重新开始播放
            player.setMediaTime(new Time(0));
            player.start();
        }
    }

}
效果图如下


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用JMF实现java写自己的视频播放器 的相关文章

  • rpm包管理功能全解

    通常在linux系统中 xff0c 服务是要通过程序来提供的 xff0c 通过调用各种接口编译好之后的源码包文件 xff0c 需要使用rpm xff08 redhat package manager xff09 命令来安装并提供相应的服务
  • 加密

    lt div id 61 34 article content 34 class 61 34 article content clearfix csdn tracking statistics 34 data pid 61 34 blog
  • 国内代码托管平台Gitee(码云)的入门使用

    网址在这 gt gt gt 码云官网地址 中文代码托管平台 xff0c 英文不好的话 xff0c 使用github一定的障碍 xff0c 所有gitee是很好的选择 文章目录 一 新建仓库二 AndroidStudio使用码云 xff08
  • Docker

    1 环境准备 官方网址 xff1a https docs docker com engine install centos CentOS 7 虚拟机 环境查看 root 64 localhost cat etc centos release
  • Idea kafka 远程 debug

    1 kafka kafka run class sh 修改 xff0c 总共两处需要修改 xff1a mhbtest 64 localhost kafka 2 11 1 0 1 vim bin kafka run class sh if l
  • 高质量嵌入式Linux C编程 .pdf

    http 链接 xff1a https pan baidu com s 10MjISMt0nNeVWo3L 8VCaQ 提取码 xff1a mxhh
  • 来到CSDN

    刚到CSDN 的时候写过一篇关于来到CSDN 的博客 感觉表达不够清楚在此修改一下 写博客是进入提高班后老师要求的 xff0c 至于老师为什么让我们写博客大家可以看这里 博客是需要用心经营的 开始的时候一直在网易上写 xff0c 后来发现网
  • 【毕设调试一】WiFi模块esp8266的调试

    硬件说明 xff1a span style color fe2c24 strong 提示 xff1a strong span span style color 0d0016 主控芯片STM32F103C8T6 xff0c 与WiFi通信串口
  • ubuntu系统下用kazam软件录制的视频不能在windows系统下播放的解决方案

    ubuntu系统下用kazam软件录制的视频不能在windows系统下播放的解决方案 参考文章 xff1a xff08 1 xff09 ubuntu系统下用kazam软件录制的视频不能在windows系统下播放的解决方案 xff08 2 x
  • Huawei LiteOS与freeRTOS、Ucos主流嵌入式操作内核的区别

    LiteOS与freeRTOS Ucos主流嵌入式操作内核的区别 云社区 华为云
  • ROS串口读取16进制的数据

    include lt ros ros h gt 必备 include lt serial serial h gt ROS已经内置了的串口包 include lt iostream gt 输入输出库 int main int argc cha
  • Linux C语言 串口与网络的数据透传/串口服务器

    Linux下C语言 串口与网络的数据透传 已经有开源的软件ser2net 实现了类似的功能 而且更加强大 支持telnet配置参数 而且越来越大 下载源码看了 实现比较复杂 网络上也有许多类似的 但最终还是决定自己写一个 网口采用TCP通信
  • 【国产板切换到sd启动步骤】

    7 Jetson Nano正常启动后 xff0c 确认SD卡是否被识别 xff1a span class token function sudo span span class token function ls span dev mmcb
  • 如何使用 DATAX 以 UPSERT 语义更新下游 ORACLE 数据库中的数据?

    如何使用 DATAX 以 UPSERT 语义更新下游 ORACLE 数据库中的数据 xff1f 1 业务背景 在数据架构上 xff0c 很多大数据项目 xff0c 都会将 HIVE SPARK 等离线计算引擎计算获得的结果数据同步到下游业务
  • 【systemd】关于systemd中的 $MAINPID

    MAINPID is a systemd variable for your service that points to the PID of the main application MAINPID是服务的systemd变量 xff0c
  • 【docker】如何拉取特定版本的镜像

    CentOS镜像 docker pull centos centos6 docker pull centos centos7 默认会拉取centos6 centos7 最新版本的镜像 如果你想拉取指定版本的镜像怎么办 xff1f 看Cent
  • 测试分析报告

    测试分析报告 1 引言 1 1 1 编写目的 1 1 2 背景 1 1 3 定义 2 1 4 参考资料 2 2 测试概要 2 3 测试结果及发现 3 3 1 测试 1 xff08 normal xff09 3 3 2 测试 2 xff08
  • 【Docker&ARM】ARM架构服务器上docker的安装

    使用官方仓库安装 Install using the repository https docs docker com install linux docker ce centos 不同Linux发行版 xff0c 添加相应的仓库即可安装
  • 【字符集】解决docker 容器中中文乱码问题

    一个后端服务容器中解压zip包 xff0c 释放出带文件名带中文的文件 xff0c 中文显示被 代替 xff0c 初步推断是服务基础镜像系统字符集出现问题 进入容器中端界面 xff0c 手动创建带中文的文件 xff0c 果不其然 xff0c
  • 【bash】关于shell中 bash -c 执行命令或者可执行文件

    我们知道 c 的意思是 command xff0c 所以 bash c 后面应该跟一个 command 用法 xff1a bash c cmd string 通常使用shell去运行脚本 xff0c 两种方法 bash xxx sh xff

随机推荐

  • 【fiddler】用fiddler实现android手机抓包

    一 fiddler的简介 fiddler是位于客户端和服务器端之间的代理 xff0c 也是目前最常用的抓包工具之一 它能够记录客户端和服务器之间的所有 请求 xff0c 可以针对特定的请求 xff0c 分析请求数据 设置断点 调试web应用
  • 【HttpCanary】Android网络分析工具HttpCanary使用教程

    黑科技HttpCanary xff0c 最强大的Android网络分析工具 https juejin cn post 6844903745562607624 HttpCannary 抓包视频教程 https space bilibili c
  • 【kafka】Kafka 可视化工具Kafka Eagle安装和使用

    一 背景 Kafka产线环境需要管理的Topic和Consumser越来越多 xff0c 使用命令行工具进行管理会非常繁杂 因此 xff0c 大数据平台上需要一套Kafka的管理监控系统 xff0c Kafka Eagle Kafka Ea
  • 【history】如何丝滑地记录Linxu命令行操作历史?

    对于运维来讲 xff0c history命令应该说是用到最多的了 xff0c 尤其是一些老旧的系统 xff0c 一些历史命令更多时候 xff0c 相当于是运维手册 xff0c 但是history命令有时候也有很多不方便的地方 今天介绍一种方
  • 【CPU】如何正确理解 CPU 使用率和平均负载的关系?

    什么是 CPU 使用率 xff1f CPU 使用率就是 CPU 非空闲态运行的时间占比 xff0c 它反映了 CPU 的繁忙程度 比如 xff0c 单核 CPU 1s 内非空闲态运行时间为 0 8s xff0c 那么它的 CPU 使用率就是
  • 【分布式】日志技术

    日志技术是宕机恢复的主要技术之一 日志技术最初使用在数据库系统中 严格来说日志技术不是一种分布式系统的技术 xff0c 但在分布式系统的实践中 xff0c 却广泛使用了日志技术做宕机恢复 xff0c 甚 至如BigTable 等系统将日志保
  • 【故障诊断】【git】git只能下载一个分支,怎么办?

    很多朋友可能都会遇到一个问题 xff0c 就是远程的git明明有两个分支 xff0c 但是却只能下载一个 xff0c 这样该怎么处理呢 xff1f 首先要澄清 xff0c git clone确实只能下载一个分支 xff0c 我们只能先把ma
  • 23种设计模式

    目录 创建型 1 Factory Method xff08 工厂方法 xff09 2 Abstract Factory xff08 抽象工厂 xff09 3 Builder xff08 建造者 xff09 4 Prototype xff08
  • Docker的asp.net core应用部署系列目录(完结)

    第一章 实验基础环境 本系列将用VirtualBox虚拟机安装ubuntu desktop 18 版本进行演示 xff0c 安装方式自行探索 xff0c 亦可购买各种云的linux服务器 章节间多少有依赖 xff0c 请根据自身情况跳过熟悉
  • Docker的asp.net core应用部署系列—— docker运行asp.net core应用镜像

    本系列目录请看这里 https blog csdn net michel4liu article details 80819510 我们接着上篇 xff0c 已经编译好镜像 xff0c 本篇将介绍两种启动方式 xff0c 交互模式启动和后台
  • Docker的asp.net core应用部署系列——进入正在运行的docker容器里面

    本系列目录请看这里 https blog csdn net michel4liu article details 80819510 我们之前已经可以通过交互或后台方式启动一个容器 xff0c 有时我们需要进入docker里面看一些log或者
  • DATAX:MongoDB增量数据写入到mysql中

    项目场景 xff1a 简述 xff1a 使用DATAX进行Mongo的数据抽取 xff0c 然后写入到mysql中 xff0c 其中会牵涉到全量数据的写入和增量数据的写入 全量 数据的写入我们只需要正常写JSON模板即可 xff0c 使用c
  • 无人机自动驾驶软件系列 E04

    无人机自动驾驶软件系列 E04 xff1a 深度估计 xff0c 八叉树地图以及路径规划 详细配置https gaas gitbook io guide software realization build your own autonom
  • Window11安装如何跳过TPM2.0这一步

    最近想体验一把window11 xff0c 怎奈自己的电脑太老了 xff0c 显示不能安装 xff0c 网上大佬们都说是tpm2 0的问题 xff0c 顺着这个角度 xff0c 找到了一个国外大神的解决办法 1 在出现 Win11 会提示
  • 修改已运行Docker容器的端口映射

    方法一 删除容器 xff0c 重新新建容器多加一个 p端口映射即可 方法二 修改容器配置文件 重启docker服务 模拟创建运行中的容器 span class token punctuation span root 64 redmine t
  • e指数函数

    使用win自带的计算器 xff0c 进行以e为底的指数函数进行运算时 xff0c 发现计算器上的EXP键只能用做表示10的多少次方 xff0c 如5e3 xff0c 指的是5乘以10的3次方 xff0c 及5000 查了一下 xff0c 也
  • xsens惯导在ROS下输出汇总

    rostopic list 分别记录下每个对应的信息 xff1a 1 rostopic echo diagnostics header seq 454 stamp secs 1572609754 nsecs 307622909 frame
  • c 编程中extern关键字 使用跨文件全局变量

    我们知道 xff0c 程序的编译单位是源程序文件 xff0c 一个源文件可以包含一个或若干个函数 在函数内定义的变量是局部变量 xff0c 而在函数之外定义的变量则称为外部变量 xff0c 外部变量也就是我们所讲的全局变量 它的存储方式为静
  • 年度回忆录(?——2011.01)

    这是在CSDN 上的第一篇总结 xff08 或者说是回忆录 xff09 xff0c 个人认为 xff1a 总结 xff0c 尤其是年度总结是十分必要的 她可以很好的映射出自己以往的不足 xff0c 并为自己下一步的学习指明方向 以前在网易上
  • 使用JMF实现java写自己的视频播放器

    JMF这个多媒体开发框架太牛了 xff0c 简单的几句代码就能实现一个视频播放器的开发 xff0c 厉害 xff0c 就是支持的格式少了一些 xff0c 没关系 xff0c 这个视频播放器可以播放mpg xff0c avi fvl等等 xf