iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >在java中实现视频处理及播放功能详解
  • 612
分享到

在java中实现视频处理及播放功能详解

java音视频开发语言 2023-09-08 07:09:19 612人浏览 薄情痞子
摘要

我们知道,现在视频可以说是最火爆的多媒体手段了,所以顺带着视频处理技术也就成了目前炙手可热的技术之一了。我们作为一个Java程序员,又该怎么处理视频呢?今天Java架构栈就给大家讲解一下,如何通过Java代码来实现视频处理及播放。 一. 需

我们知道,现在视频可以说是最火爆的多媒体手段了,所以顺带着视频处理技术也就成了目前炙手可热的技术之一了。我们作为一个Java程序员,又该怎么处理视频呢?今天Java架构栈就给大家讲解一下,如何通过Java代码来实现视频处理及播放。

一. 需要了解的技术点

在具体实现之前,我们先来看看视频处理需要了解的技术点都有哪些。

FFmpeg

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。 FFmpeg在linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括windowsMac OS X等。这个项目最早由Fabrice Bellard发起,2004年至2015年间由Michael Niedermayer主要负责维护。许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。项目的名称来自MPEG视频编码标准,前面的"FF"代表"Fast Forward"。 [1] FFmpeg编码库可以使用GPU加速。

HLS

HLS(Http Live Streaming)是Apple的动态码率自适应技术。主要用于PC和Apple终端的音视频服务。包括一个m3u8的索引文件,TS媒体分片文件和key加密串文件。

HLS的工作原理:将视频文件分成多个ts格式的小文件,通过m3u8格式的索引文件对这些ts小文件组织索引。播放器可以通过连接m3u8文件播放视频,当要快进时可以通过m3u8这个索引文件找到对应的小文件,并去下载对应的ts文件,最终可以实现快进、快退、实时播放等功能。

m3u8所以文件和ts小文件可以让FFmpeg帮我们生成。

video.js 网络播放器

Video.js是一个为HTML5世界从头开始构建的网络视频播放器。它支持html5视频和现代流媒体格式,它支持桌面和移动设备上的视频播放。该项目于2010年中期启动,目前已有数百名撰稿人,在450000多个网站上使用。

官方地址:https://videojs.com/

二. 具体实现步骤

了解完上面的这些基本理论知识后,接下来咱们就来看看该如何进行代码实现吧。

使用ffmpeg将录制的avi格式文件生成MP4文件

我们可以把avi格式的文件转为mp4格式的文件,实现代码如下所示:

  public String makeMp4(String ffmpeg_path,String video_path,String mp4folder_path,String mp4_name){  //ffmpeg.exe -i qfedu.avi -c:v libx264 -s 1280x720 -pix_fmt yuv420p -b:a 63k -b:v 753k -r 18 .\qfedu.mp4  // 通过 ProcessBuilder 执行 ffmpeg.exe  List cmd = new ArrayList();  cmd.add(ffmpeg_path);  cmd.add("-i");  cmd.add(video_path);  cmd.add("-c:v");  cmd.add("libx264");  cmd.add("-y");  cmd.add("-s");  cmd.add("1280x720");  cmd.add("-pix_fmt");  cmd.add("yuv420p");  cmd.add("-b:a");  cmd.add("63k");  cmd.add("-b:v");  cmd.add("753k");  cmd.add("-r");  cmd.add("18");  cmd.add(mp4folder_path + mp4_name );  String outstring = null;  try {  ProcessBuilder builder = new ProcessBuilder();  builder.command(cmd);  builder.redirectErrorStream(true);  Process process = builder.start();  outstring = getProcessResult(process);  System.out.println(outstring);  return "ok";  } catch (Exception ex) {  ex.printStackTrace();  return "error";  }  }  public String getProcessResult(Process process) {String result = "error";int exitValue = -1;InputStream inputStream = null;InputStream errorInputStream = null;StringBuffer outputString = new StringBuffer();try {inputStream = process.getInputStream();errorInputStream = process.getErrorStream();boolean finished = false;int max = 300;//每次休眠1秒,最长执行时间5分种int count = 0;while (!finished) {//超过5分钟,默认失败if (retry > max) {return "error";}
         try {             while (inputStream.available() > 0) {                 Character c = new Character((char) inputStream.read());                 outputString.append(c);                 System.out.print(c);             }             while (errorInputStream.available() > 0) {                 Character c = new Character((char) errorInputStream.read());                 outputString.append(c);                 System.out.print(c);             }             exitValue = p.exitValue();             finished = true;         } catch (IllegalThreadStateException e) {             Thread.currentThread().sleep(1000);//休眠1秒             count++;         }     } } catch (Exception e) {     e.printStackTrace(); } finally {     if (inputStream != null) {         try {             inputStream.close();         } catch (IOException e) {             System.out.println(e.getMessage());         }     } } return outputString.toString();

使用ffmpeg将MP4文件生成m3u8/ts文件

我们也可以把MP4格式的文件转换为m3u8/ts格式的文件,实现代码如下所示:

    List cmd = new ArrayList();  cmd.add(ffmpeg_path);  cmd.add("-i");  cmd.add(video_path);  cmd.add("-hls_time");  cmd.add("10");  cmd.add("-hls_list_size");  cmd.add("0");  cmd.add("-hls_segment_filename");  cmd.add(m3u8folder_path + m3u8_name.substring(0, m3u8_name.lastIndexOf(".")) + "_%05d.ts");  cmd.add(m3u8folder_path + m3u8_name);  String out = null;  try {  ProcessBuilder processBuilder = new ProcessBuilder();  processBuilder.command(cmd);  processBuilder.redirectErrorStream(true);  Process process = processBuilder.start();  out = getProcessResult(process);  System.out.println(out);  } catch (Exception e) {  e.printStackTrace();  }  //通过检查生成的m3u8的文件列表判断是否成功  List tsList = getTsList(m3u8folder_path,m3u8_name);  if (tsList == null) {  return "error";  }  return "success";  }    public List getTsList(String m3u8folder_path,String m3u8_name ) {  List fileList = new ArrayList();  List tsList = new ArrayList();  String m3u8file_path = m3u8folder_path + m3u8_name;  BufferedReader reader = null;  String str = null;  String line = "";  try {  reader = new BufferedReader(new FileReader(m3u8file_path));  while ((str = reader.readLine()) != null) {  line = str;  if (line.endsWith(".ts")) {  tsList.add(line);  }  }  } catch (IOException e) {  e.printStackTrace();  } finally {  if (reader != null) {  try {  reader.close();  } catch (IOException e) {  e.printStackTrace();  }  }  }  if (line.contains("#EXT-X-ENDLIST")) {  fileList.addAll(tsList);  return fileList;  }  return null;  }

使用基于html5支持Video.js网络视频播放器播放视频

我们也可以在html页面中,把处理好的视频嵌入进来,供用户流量播放。

 

来源地址:https://blog.csdn.net/GUDUzhongliang/article/details/131537752

--结束END--

本文标题: 在java中实现视频处理及播放功能详解

本文链接: https://www.lsjlt.com/news/399522.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 在java中实现视频处理及播放功能详解
    我们知道,现在视频可以说是最火爆的多媒体手段了,所以顺带着视频处理技术也就成了目前炙手可热的技术之一了。我们作为一个Java程序员,又该怎么处理视频呢今天Java架构栈就给大家讲解一下,如何通过Java代码来实现视频处理及播放。 一. 需要...
    99+
    2023-09-08
    java 音视频 开发语言
  • C++ Qt实现音视频播放功能
    由于最近着手的Qt项目需要视频播放 自己做的时候踩了很多坑 避免以后踩坑 故在此记录实现过程  Qt版本 5.9 基于C++11 Qt核心组件与附加组件安装时请打钩 否则可能出现项目...
    99+
    2024-04-02
  • HTML5如何实现视频播放功能
    这篇文章将为大家详细讲解有关HTML5如何实现视频播放功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。hivideo是一款基于html5的视频播放器,摒弃video原有...
    99+
    2024-04-02
  • android怎么实现视频播放功能
    Android可以使用MediaPlayer或ExoPlayer等库来实现视频播放功能。以下是一种常见的实现方法:1. 添加权限和依...
    99+
    2023-08-23
    android
  • flutter开发实战-video_player视频播放功能及视频缓存
    flutter开发实战-video_player视频播放功能及视频缓存 最近开发过程中video_player播放视频, 一、引入video_player 在pubspec.yaml引入video...
    99+
    2023-09-16
    flutter 音视频 缓存 video_player cache AVPlayer ExoPlayer
  • Android GSYVideoPlayer视频播放器功能的实现
    GSYVideoPlayer GSYVideoPlayer官方地址 GSYVideoPlayer 一个基于IJkPlayer的播放器 支持调节声音亮度 边播边缓存 使用了Andro...
    99+
    2024-04-02
  • 基于Qt实现视频播放器功能
    目录一、功能介绍二、代码三、运行一、功能介绍 能实现视频播放 二、代码 mainwindow.h #ifndef MAINWINDOW_H #define MAINWIND...
    99+
    2024-04-02
  • SpringBoot+thymeleaf实现读取视频列表并播放视频功能
    目录效果实现过程后端程序示例前端程序示例通过读取数据库video表获取当前视频的视频名、视频地址,展示至前端页面videorecord.html,通过点击播放按钮获取数据id进而得到...
    99+
    2024-04-02
  • C++ Qt如何实现音视频播放功能
    这篇文章将为大家详细讲解有关C++ Qt如何实现音视频播放功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。由于最近着手的Qt项目需要视频播放 自己做的时候踩了很多坑&n...
    99+
    2023-06-21
  • SpringBoot+thymeleaf怎么实现读取视频列表并播放视频功能
    这篇文章主要介绍了SpringBoot+thymeleaf怎么实现读取视频列表并播放视频功能的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot+thymeleaf怎么实现读取视频列表并播放视频功...
    99+
    2023-06-30
  • 视频在线点播功能如何实现?
    1. 视频点播需求分析 1.1 需求描述 视频点播需求如下: 1、学生可以在windows浏览器上在线观看视频。 2、播放器具有快进、快退、暂停等基本功能。 1.2 视频点播解决方案 ...
    99+
    2023-09-14
    java python php Powered by 金山文档
  • Android仿搜狐视频、微视等列表播放视频功能的详细解析
    这篇文章主要讲解了Android仿搜狐视频、微视等列表播放视频功能的详细解析,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。最近项目中需要是实现在列表中自动播放视频,中间遇到了些问题,终于解决,特来跟大家分享一下...
    99+
    2023-05-30
    android roi %d
  • 如何实现小程序视频列表中视频的播放与停止功能
    小编给大家分享一下如何实现小程序视频列表中视频的播放与停止功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!效果类似一条视频的小...
    99+
    2024-04-02
  • 界面开发(4)--- PyQt5实现打开图像及视频播放功能
    PyQt5创建打开图像及播放视频页面 上篇文章主要介绍了如何实现登录界面的账号密码注册及登录功能,还简单介绍了有关数据库的连接方法。这篇文章我们介绍一下如何在设计的页面中打开本地的图像,以及实现视频播...
    99+
    2023-09-06
    qt 音视频 python
  • html5如何实现自动播放mov格式视频功能
    这篇文章给大家分享的是有关html5如何实现自动播放mov格式视频功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、首先网站要支持.MOV格式文件就是说,网站要能识别.MOV格式文件。<mimeMap&...
    99+
    2023-06-09
  • React+TS+IntersectionObserver实现视频懒加载和自动播放功能
    目录IntersectionObserver视频播放控制组件结语为了提高用户体验,网站通常会使用视频来呈现内容。然而,在网站中使用自动播放的视频通常会导致页面加载时间变长,因为用户需...
    99+
    2023-05-18
    React懒加载 React视频自动播放
  • 安卓使用VLC播放视频,实现截图和录制功能
    VLC是一款非常强大的开源媒体播放器,由VideoLAN组织开发和维护。它最初是为学校项目开发的,但现在已经成为全球最流行的媒体播放器之一。 VLC具有以下几个主要特点: 多平台支持:VLC支持几乎所有主流的操作系统,包括Windows、...
    99+
    2023-09-17
    音视频 vlc RTSP
  • Java Red5服务器搭建(实现在线直播,流媒体视频播放)
    要搭建Java Red5服务器以实现在线直播和流媒体视频播放,需按照以下步骤进行操作:1. 下载和安装Java Developmen...
    99+
    2023-10-12
    Java
  • 怎么在Vue中利用node实现音频录制播放功能
    本篇文章给大家分享的是有关怎么在Vue中利用node实现音频录制播放功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。vue部分:安装recorderxcnpm in...
    99+
    2023-06-14
  • 实现微信小程序中的音频播放功能
    标题:实现微信小程序中的音频播放功能微信小程序作为一种快速便捷的应用开发平台,为开发者提供了众多丰富的功能。在小程序中,音频播放功能是非常常见且重要的需求之一。本文将介绍如何在微信小程序中实现音频播放功能,并提供具体的代码示例。一、准备工作...
    99+
    2023-11-21
    音频播放 微信小程序 实现功能
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作