Java实现视频通话

这篇具有很好参考价值的文章主要介绍了Java实现视频通话。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

视频通话是现在的主流,但是你知道是如何实现的吗?如果想要实现这些技术,肯定是需要了解TCP协议,因为在数据传输时可能会存在粘包的问题,如果没有了解,那么是做不出来的。这里以socket示例,在netty中也会一通百通。
项目准备,导入读取相机流的jar包

<dependency>
      <groupId>com.github.sarxos</groupId>
      <artifactId>webcam-capture</artifactId>
      <version>0.3.12</version>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.36</version>
    </dependency>

客户端

import com.github.sarxos.webcam.Webcam;
import java.awt.*;
import java.awt.image.BufferedImage;
public class Client extends javax.swing.JFrame{
    //获取客户端画布
    Graphics g;
    public void setUI() throws Exception {
        this.setTitle("视频");
        this.setSize(new Dimension(600,600));
        this.setVisible(true);
        this.setDefaultCloseOperation(3);
        g = this.getGraphics();
        //打开网络连接模块
        ClientConn clientconn = new ClientConn(9999,"127.0.0.1");
        clientconn.conn();
        setWebcam(clientconn);

    }

    //获取摄像头权限并获得图片
    public void setWebcam(ClientConn clientconn) throws Exception {
        // get default webcam and open it获取网络摄像头设置并打开
        Webcam webcam = Webcam.getDefault();
        webcam.open();
        while(true) {
            // get image获取图片
            BufferedImage image = webcam.getImage();
            drawImage(g,image);
            clientconn.trans(image);
        }
    }

    public void drawImage(Graphics g,BufferedImage image) {
        g.drawImage(image,10,10,null);
    }

    public static void main(String[] args) throws Exception {
        Client c = new Client();
        c.setUI();
    }
}

客户端传输类

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;

public class ClientConn {
	private DataOutputStream out;
	private int port;
	private String host;

	public ClientConn(int port,String host){
		this.port = port;
		this.host = host;
	}
	public void conn() {
		try {
			//创建客户端对象并连接服务器
			Socket client = new Socket(host,port);
			//初始化输入输出流
			out = new DataOutputStream(client.getOutputStream());
		} catch (IOException e) {
			e.printStackTrace();
			System.out.println("程序出错了");	
		}
		
		
	}
	public void trans(BufferedImage image) throws Exception {
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		ImageIO.write(image,"jpeg",baos);
		//这里进行拆包发送,防止对方读取错误
		byte[] array = baos.toByteArray();
		out.writeInt(array.length);//告诉服务器这个给包的大小
		out.write(array);
		out.flush();
	}


}


服务器端(也就相当于客户端,点对点通信)

import javax.swing.*;
import java.awt.*;
import java.io.IOException;

public class Server extends JFrame{
    private Graphics g;
    public void setUI(int port) throws IOException {
        this.setTitle("服务器");
        this.setSize(new Dimension(600,600));
        this.setVisible(true);
        this.setDefaultCloseOperation(3);
        this.g = this.getGraphics();
        //服务器通信板块,端口9999
        ServerConn serverConn = new ServerConn(g);
        serverConn.setServer(port);
        serverConn.trans();
    }
    public static void main(String[] args) throws IOException {
        Server server = new Server();
        server.setUI(9999);
    }

}

视频图片(视频是由图片合成的)文章来源地址https://www.toymoban.com/news/detail-516831.html

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;

public class ServerConn {

	private DataInputStream in;
	java.io.OutputStream out;
	Graphics g;

	public ServerConn(Graphics g) {
		this.g = g;
	}

	//建立服务器函数,port为端口号
	public void setServer(int port) {
		try {
			//创建服务器,建立服务器对象
			java.net.ServerSocket ss = new java.net.ServerSocket(port);
			System.out.println("服务器创建成功" + port);
			//等待客户端对象连接
			java.net.Socket client = ss.accept();
			System.out.println("有个客户机成功连接客户机");
			//初始化输入输出流
			in = new DataInputStream(client.getInputStream());
			out = client.getOutputStream();
			//数据流
		} catch (IOException e) {
			// TODO Auto-generated catch block
			System.out.println("连接失败");
			e.printStackTrace();
		}
	}

	// 读图片
	public void trans() throws IOException {
		while (true){
			int size = in.readInt();//读取对方发送的包大小
			byte[] bytes = new byte[size];
			int read = in.read(bytes);
			ByteArrayInputStream stream = new ByteArrayInputStream(bytes);
			BufferedImage image = ImageIO.read(stream);
			g.drawImage(image,0,0,null);//将读到的图片进行绘制
			System.out.println(read == bytes.length);
		}
	}
}

到了这里,关于Java实现视频通话的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • WebRTC实战-第二章-使用WebRTC实现音视频通话

    、 什么是WebRTC|WebRTC入门到精通必看|快速学会音视频通话原理|WebRTC超全资料分享FFmpeg/rtmp/hls/rtsp/SRS WebRTC **WebRTC详细指南** http://www.vue5.com/webrtc/webrtc.html WEBRTC三种类型(Mesh、MCU 和 SFU)的多方通信架构 WebRTC API包括媒体捕获,音频和视频编码和解码,传输层和会话管理 。 假设

    2023年04月12日
    浏览(53)
  • C++/Qt音视频通话开发MetaRTC源码解读,coturn穿透stun的使用

    本章内容解读MetaRTC开源代码,无任何二次开发,用于学习交流。 MetaRTC是国人开发的开源项目,适用各种场景音视频二次开发,可以去git阅读README,我们使用相对成熟的版本测试: Release v5.0-b4。 之前的demo是在同一个局域网的条件下,sdp交换IP和端口后就可以收发音视频数据

    2023年04月18日
    浏览(48)
  • 《保姆级教程》基于Agora SDK实现音视频通话及屏幕共享

    😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。😊 座右铭:不想当开发的测试,不是一个好测试✌️。 如果感觉博主的文章还不错的话,还请点赞、收藏哦

    2024年02月12日
    浏览(47)
  • WebRTC音视频通话(二)简单音视频通话

    本篇不详细介绍websocket,只针对websocket整合rtc。 webrtc是P2P通信,也就是实际交流的 只有两个人 ,而要建立通信,这两个人需要 交换一些信息来保证通信安全 。而且, webrtc必须通过ssh加密 ,也就是使用https协议、wss协议。 借用一幅图 1.1 创建端点的解析 以下解析不包括we

    2023年04月09日
    浏览(63)
  • C++/Qt音视频通话开发MetaRTC源码解读,dtls交互流程,dtls抓包分析

    本章内容解读MetaRTC开源代码,无任何二次开发,用于学习交流。 MetaRTC是国人开发的开源项目,适用各种场景音视频二次开发,可以去git阅读README,我们使用相对成熟的版本测试: Release v5.0-b4。 本章解读dtls交互流程,dtls抓包分析,dlts概念介绍。 DTLS (Datagram Transport Layer Se

    2023年04月09日
    浏览(48)
  • 保姆级教程!基于声网 Web SDK实现音视频通话及屏幕共享

    本篇文章主要给小伙伴们分享如何使用声网 SDK 实现 Web 端音视频通话及屏幕共享功能,其中也会涵盖在实践过程中遇到的一些问题,以此记录防止小伙伴们踩坑,同时也希望通过从 0 到 1 实战的分享,能够帮助更多的小伙伴。

    2024年02月16日
    浏览(64)
  • 基于webrtc的音视频通话,实现相机流识别人脸的功能

    这几天研究了一下webRTC的基础能力,在此基础之上能实现的视频通话,互动等更多实用功能。项目中使用的是阿里的rtc,我研究的是声网的是否符合功能,后续会总结和记录一下应用到的几个功能实现方法。 今天要记录的功能是项目流识别人脸的功能,其实类似功能很常见了

    2024年04月28日
    浏览(52)
  • Unity Metaverse(八)、RTC Engine 基于Agora声网SDK实现音视频通话

    本文介绍如何在Unity中接入声网SDK,它可以应用的场景有许多,例如直播、电商、游戏、社交等,音视频通话是其实时互动的基础能力。 如下图所示,可以在官网中选择Unity SDK进行下载,也可以到 Unity Asset Store 资源商店中搜索 Agora SDK 进行下载导入。 在官网中前往 Console 控制

    2024年02月09日
    浏览(57)
  • WebRTC音视频通话-WebRTC本地视频通话使用ossrs服务搭建

    iOS开发-ossrs服务WebRTC本地视频通话服务搭建 之前开发中使用到了ossrs,这里记录一下ossrs支持的WebRTC本地服务搭建。 ossrs是什么呢? SRS(Simple Realtime Server)是一个简单高效的实时视频服务器,支持RTMP、WebRTC、HLS、HTTP-FLV、SRT等多种实时流媒体协议。 官网地址:https://ossrs.net/lt

    2024年02月12日
    浏览(46)
  • Hololens2远程音视频通话与AR远程空间标注,基于OpenXR+MRTK3+WebRTC实现

    下面展示一些 内联代码片 。

    2024年04月10日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包