`

java视频类

    博客分类:
  • java
阅读更多
//Playback.java
package com.softfz;
//下面是音频输出的代码:

import java.io.*;
import javax.sound.sampled.*;
import java.net.*;


/**
* Title:        VoiceChat
* Description:  输出音频(放音程序)
* Copyright:    Copyright (c) 2001
*/


class Playback implements Runnable {

       final int bufSize = 16384;
       SourceDataLine line;
       Thread thread;
       Socket s;

       Playback(Socket s){//构造器 取得socket以获得网络输入流
         this.s=s;
       }
       public void start() {

           thread = new Thread(this);
           thread.setName("Playback");
           thread.start();
       }

       public void stop() {
           thread = null;
       }

       public void run() {

           AudioFormat format =new AudioFormat(8000,16,2,true,true);//AudioFormat(float sampleRate, int sampleSizeInBits, int channels, boolean signed, boolean bigEndian)
           BufferedInputStream playbackInputStream;

           try {
             playbackInputStream=new BufferedInputStream(new AudioInputStream(s.getInputStream(),format,2147483647));//封装成音频输出流,如果网络流是经过压缩的需在此加套解压流
           }
           catch (IOException ex) {
               return;
           }

           DataLine.Info info = new DataLine.Info(SourceDataLine.class,format);

           try {
               line = (SourceDataLine) AudioSystem.getLine(info);
               line.open(format, bufSize);
           } catch (LineUnavailableException ex) {
               return;
           }

           byte[] data = new byte[1024];//此处数组的大小跟实时性关系不大,可根据情况进行调整
           int numBytesRead = 0;
           line.start();

           while (thread != null) {
              try{
                 numBytesRead = playbackInputStream.read(data);
                 line.write(data, 0,numBytesRead);
              } catch (IOException e) {
                   break;
               }
           }

           if (thread != null) {
               line.drain();
           }

           line.stop();
           line.close();
           line = null;
       }
}

//Capture.java
package com.softfz;
//音频捕获部分,

import java.io.*;
import javax.sound.sampled.*;
import java.net.*;

/**
* Title:        VoiceChat
* Description:  音频捕捉(录音程序)
* Copyright:    Copyright (c) 2001
*/

class Capture implements Runnable {

       TargetDataLine line;
       Thread thread;
       Socket s;
       BufferedOutputStream captrueOutputStream;

       Capture(Socket s){//构造器 取得socket以获得网络输出流
         this.s=s;
       }

       public void start() {

           thread = new Thread(this);
           thread.setName("Capture");
           thread.start();
       }

       public void stop() {
           thread = null;
       }

       public void run() {

           try {
             captrueOutputStream=new BufferedOutputStream(s.getOutputStream());//建立输出流 此处可以加套压缩流用来压缩数据
           }
           catch (IOException ex) {
               return;
           }

           AudioFormat format =new AudioFormat(8000,16,2,true,true);//AudioFormat(float sampleRate, int sampleSizeInBits, int channels, boolean signed, boolean bigEndian)
           DataLine.Info info = new DataLine.Info(TargetDataLine.class,format);

           try {
               line = (TargetDataLine) AudioSystem.getLine(info);
               line.open(format, line.getBufferSize());
           } catch (Exception ex) {
               return;
           }

           byte[] data = new byte[1024];//此处的1024可以情况进行调整,应跟下面的1024应保持一致
           int numBytesRead=0;
           line.start();

           while (thread != null) {
               numBytesRead = line.read(data, 0,128);//取数据(1024)的大小直接关系到传输的速度,一般越小越快,
               try {
                 captrueOutputStream.write(data, 0, numBytesRead);//写入网络流
               }
               catch (Exception ex) {
                   break;
               }
           }

           line.stop();
           line.close();
           line = null;

           try {
               captrueOutputStream.flush();
               captrueOutputStream.close();
           } catch (IOException ex) {
               ex.printStackTrace();
           }
       }
    
}



分享到:
评论

相关推荐

    java 视频工具类 java 视频工具类 java 视频工具类 java 视频工具类 java 视频工具类 java 视频工具

    java 视频工具类 java 视频工具类java 视频工具类 java 视频工具类java 视频工具类 java 视频工具java 视频工具类 java 视频工具类java 视频工具类 java 视频工具类java 视频工具类 java 视频工具java 视频工具类 ...

    java实现视频压缩

    Java作为一种广泛使用的编程语言,也提供了实现视频压缩的能力。本篇将详细探讨如何使用Java来实现视频压缩,以及涉及到的相关知识点。 首先,我们要理解视频压缩的基本原理。视频是由一帧一帧的静态图像(图片)...

    ffmpeg java 封装工具类,音视频处理.zip

    FFmpeg 是一个强大的开源命令行工具,用于处理音频和视频文件。...通过这个"ffmpeg java 封装工具类",开发者可以更便捷地在Java应用中实现丰富的音视频处理功能,提高开发效率,同时降低对FFmpeg命令行知识的依赖。

    Java视频安卓版

    3 Java类和对象、属性和方法 4 Java构造方法 5 Java包等 无论您是在校大学生,还是职业学员,或者其他开发人员,本书都志在全面提高您的Java编程思想和开发实力,使您能够系统的学习Java语言,写出高质量的Java程序...

    java 实现视频上传

    在Java开发中,实现视频上传是一项常见的任务,尤其在构建Web应用或云存储服务时。这个Demo涵盖了几个关键的技术点,包括文件上传、视频转码和播放。...理解并掌握这些技术,将使你在Java视频处理领域更加熟练。

    java 服务器使用ffmpeg处理视频工具类

    java 服务器处理使用ffmpeg处理视频工具类,使用前先按照ffmpeg,并将其安装目录的bin路径加入环境变量,目前主要实现压缩,转码,增加字幕(可设定字体及位置),获取视频时长及源数据信息等功能,也可再此基础上...

    java视频上传,转码

    1. **Java视频上传**: - **文件I/O操作**:Java中的`java.io`包提供了文件读写的基本功能,用于将本地视频文件上传到服务器。 - **HTTP上传**:通常使用`java.net.HttpURLConnection`或第三方库如Apache ...

    java 视频截取 播放

    Java视频截取与播放是计算机科学中的一个重要领域,特别是在多媒体应用和数字娱乐产业中。Java作为一种跨平台的编程语言,提供了丰富的库和API来处理视频数据。本项目提供了一个功能完善的Java视频截取和播放的源...

    java视频转换工具类(附带转换工具类)

    这个"java视频转换工具类"显然提供了这样的功能,能够将视频文件转换为不同的格式,如mp4、ogg和flv等。这些格式在互联网上广泛使用,mp4适合高清播放,ogg是开源且无版权的格式,而flv则常用于流媒体服务。 要实现...

    java 视频流读写

    Java 视频流读写是Java编程中涉及多媒体处理的一部分,主要目的是为了在应用程序中处理、播放或存储视频数据。Java Media Framework (JMF) 是Java平台上的一个关键组件,用于处理音频、视频和流媒体内容。在这个"JMF...

    JAVA读取视频时间

    使用Xuggler,你可以直接访问Container类来获取视频文件的元数据,包括时间信息: ```java IContainer container = IContainer.make(); if (container.open("path_to_video", IContainerFormat.make()) ) { ...

    Java视频代码和PPT

    Java视频教程通常会涵盖基础语法、面向对象编程、异常处理、集合框架、IO流、多线程、网络编程、数据库连接(JDBC)等内容,帮助初学者逐步掌握Java编程。而PPT可能包括详细的课件,图文并茂地解释各个知识点,便于...

    java视频教程—Java文件操作

    java视频教程 Java文件操作 JavaFile

    Java视频.zip

    "Java视频.zip"提供的是一套针对Java进阶学习的资源,旨在帮助你提升技能,以适应大厂对Java专业人才的需求。 该压缩包中的视频课程涵盖了以下几个核心知识点: 1. **Java架构师**:Java架构师不仅需要精通编程,...

    java视频学习总结

    ### Java视频学习总结知识点 #### 抽象方法与抽象类 在Java中,抽象方法是一种没有具体实现(方法体)的方法,它仅提供方法签名,而具体的实现留给子类完成。一个类如果包含一个或多个抽象方法,那么这个类必须被...

    java 视频制作插件

    Java视频制作插件是用于在Java环境中开发视频处理和制作应用程序的重要工具。这些插件能够帮助开发者集成视频处理功能,例如视频捕获、编辑、转换和播放,为各种项目提供便利。Java Media Framework (JMF) 是一个...

    java视频播放器源码

    Java视频播放器源码是一个基于Java编程语言实现的多媒体播放软件的核心代码,它允许开发者创建一个能够播放不同格式视频的应用程序。在这个项目中,开发者通常会利用Java的多媒体处理库来解析、解码和渲染视频内容。...

    java视频格式转换

    Java视频格式转换是一种常见的技术需求,特别是在开发网页流媒体服务时,为了使视频能在不同的浏览器或设备上流畅播放,往往需要将多种视频格式转化为统一的标准,例如FLV(Flash Video)。FLV是Adobe Flash Player...

    在线视频视频点播系统-Java文档类资源

    这类系统通常包括视频上传、存储、转码、分发和播放等多个关键环节,涉及的技术广泛,涵盖网络、服务器、数据库、前端等多个领域。下面我们将深入探讨这个系统的组成部分和相关知识点。 1. **视频上传**:用户可以...

Global site tag (gtag.js) - Google Analytics