使用Jave转换音视频格式(网页有声音没图像,小程序不能播放问题)

news/2024/12/21 20:44:13/

最近开发微信小程序的时候,遇到了一个问题:
用户在PC后端上传的mp4格式的视频文件,在PC端只有声音没有图像,在小程序端完全不能播放。

最后结果:
1. PC浏览器video标签播放时,只有声音,没有图像。
用户上传不能正常播放的mp4文件编码格式为 hevc,即H.265格式。在浏览器的video标签中,出现只有声音没有图像的问题。
故需要进行转码,转换成H.264编码格式即可。
转码见下文。

2. 小程序端不能播放。
小程序的video标签API说是支持H264格式。经过测试,发现实际支持H264(Main),不支持H264(High)。H264 (Main)可以正常播放,但H264(High)不行。
故需要转码成H264(Main)编码的MP4文件即可。
转码见下文。

文件转码
使用的是ws.schild.jave包

  1. 在pom.xml中引入maven配置
<dependency><groupId>ws.schild</groupId><artifactId>jave-all-deps</artifactId><version>3.3.1</version>
</dependency>
  1. 转码工具类(呼吁各位贴代码的时候请带上import包的信息)
    开发小程序的请注意
    如果你出现了MP4视频文件小程序不能播放的问题。
    请考虑以下两点:
    1 URL连接中是否包含中文,比如文件名字是中文,替换成英文或数字试一下。
    2 请查看视频文件是否是 H264(Main),如果是H264(high)的话,转成H264(Main)试一下。
    video.setX264Profile(X264_PROFILE.MAIN);
    我遇到的就是上面两个问题导致视频在小程序中播放不了。
package com.util;import java.io.File;
import java.nio.file.Paths;import ws.schild.jave.Encoder;
import ws.schild.jave.MultimediaObject;
import ws.schild.jave.encode.AudioAttributes;
import ws.schild.jave.encode.EncodingAttributes;
import ws.schild.jave.encode.VideoAttributes;
import ws.schild.jave.encode.enums.X264_PROFILE;
import ws.schild.jave.info.MultimediaInfo;
import ws.schild.jave.info.VideoInfo;
import ws.schild.jave.info.VideoSize;public class VideoUtil {public static void convertVideoToMP4(String originalFilePath, String resultFilePath) {try {File originalFile = new File(originalFilePath);MultimediaObject multimediaObject = new MultimediaObject(originalFile);MultimediaInfo info = multimediaObject.getInfo();VideoInfo videoInfo = info.getVideo();VideoSize size = videoInfo.getSize();System.out.println("原视频宽:" + size.getWidth());System.out.println("原视频高:" + size.getHeight());System.out.println("原视频比特率:" + videoInfo.getBitRate() / 1000);System.out.println("原视频编码:" + videoInfo.getDecoder());VideoAttributes video = new VideoAttributes();//设置视频编码video.setCodec("h264");video.setX264Profile(X264_PROFILE.MAIN);File resultFile = new File(resultFilePath);AudioAttributes audio = new AudioAttributes();//设置编码器名称audio.setCodec("aac");EncodingAttributes attrs = new EncodingAttributes();//设置转换后的格式attrs.setOutputFormat("mp4");attrs.setAudioAttributes(audio);attrs.setVideoAttributes(video);Encoder encoder = new Encoder();encoder.encode(multimediaObject, resultFile, attrs);MultimediaObject multimediaObjectOfter = new MultimediaObject(Paths.get(resultFilePath).toFile());MultimediaInfo info1 = multimediaObjectOfter.getInfo();VideoInfo video1 = info1.getVideo();VideoSize size1 = video1.getSize();System.out.println("转换后视频宽:" + size1.getWidth());System.out.println("转换后视频高:" + size1.getHeight());System.out.println("转换后视频比特率:" + video1.getBitRate() / 1000);System.out.println("转换后视频编码:" + video1.getDecoder());} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) {String originalFilePath = "d://1.mp4";String resultFilePath = "d://2.mp4";convertVideoToMP4(originalFilePath, resultFilePath);}}

可以看到日志如下:

原视频宽:640
原视频高:340
原视频比特率:223
原视频编码:hevc (Main) (hev1 / 0x31766568)
16:21:19.222 logback [main] INFO  w.s.jave.ConversionOutputAnalyzer - Unhandled message in step: 2 Line: 22 message: <[libx264 @ 00000000028ba280] using SAR=1/1>
16:21:19.227 logback [main] INFO  w.s.jave.ConversionOutputAnalyzer - Unhandled message in step: 2 Line: 23 message: <[libx264 @ 00000000028ba280] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2>
16:21:19.228 logback [main] INFO  w.s.jave.ConversionOutputAnalyzer - Unhandled message in step: 2 Line: 24 message: <[libx264 @ 00000000028ba280] profile Main, level 3.0, 4:2:0, 8-bit>
16:21:19.228 logback [main] INFO  w.s.jave.ConversionOutputAnalyzer - Unhandled message in step: 2 Line: 25 message: <[libx264 @ 00000000028ba280] 264 - core 164 r3075 66a5bc1 - H.264/MPEG-4 AVC codec - Copyleft 2003-2021 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x1:0x111 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=11 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00>
16:21:30.098 logback [main] INFO  w.s.jave.ConversionOutputAnalyzer - Unhandled message in step: 3 Line: 70 message: <[mp4 @ 00000000028b6f80] Starting second pass: moving the moov atom to the beginning of the file>
转换后视频宽:640
转换后视频高:340
转换后视频比特率:281
转换后视频编码:h264 (Main) (avc1 / 0x31637661)

可以看到文件已经转换成h264 (Main) 格式,这种格式可以兼容PC网页和小程序。
如果是h264 (High),则小程序端不能播放,PC页面可以正常播放。

最后附上Jave2 Github传送门:
https://github.com/a-schild/jave2


http://www.ppmy.cn/news/938103.html

相关文章

网页播放有画面,没有声音???

症状&#xff1a; 用&#xff08;几乎&#xff09;任何播放器播放Flash以及网页中内嵌入Flash的视频&#xff08;如土豆网、youtube等的网络视频&#xff09;时&#xff0c;只有画面&#xff0c;没声音&#xff1b;Windows提示音没有了&#xff0c;且任务栏右边的小喇叭无法调…

html5网页播放声音

网页上时常需要语音播放新消息提醒&#xff0c;这时可以用<audio>标签定义声音&#xff0c;比如音乐或其他音频流&#xff0c;<audio>是HTML5的新标签。 <audio>属性&#xff1a; 属性 值 描述 autoplay autoplay 如果出现该属性&#xff0c;则音频就绪后…

网页中播放声音

1.使用dhtml标记<bgsound>。 <bgsound idbg1 src"mid/1.mid"> <select οnchange"bg1.srcthis.value"> <option value"mid/1.mid">1</option> <option value"mid/2.mid">…

SpringCloud Gateway网关

文章目录 SpringCloud Gateway1.1 网关架构1.2微服务网关介绍1.3Spring Cloud Gateway(技术选型)1.4依赖1.5yaml配置(包含gateway相关配置,实现转发的功能)1.6断言案例:1.7断言详细介绍1.8 整合nacos1.9 nacos整合网关案例1.10动态路由 SpringCloud Gateway 1.1 网关架构 (dub…

网页打开没声音解决方法

一般是使用了什么优化软件或者安装、卸载了各种解码器导致的。 要解决这个问题&#xff0c;可以单击“开始”菜单→“运行”输入“regedit”并回车打开注册表编辑器&#xff0c;在左侧窗格依次单击 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Dr…

科大讯飞非凡计划0715笔试 C++

第一题&#xff1a;小y删数字 给定一个长度为n的数组&#xff0c;数组元素为a1, a2, . . , an&#xff0c;每次能删除任意a的任意一位&#xff0c;求将所有数字变成0最少需要几步。例如103若删除第1位则变成3;若删除第2位则变成13;若删除第3位则变成10。输入描述第一行一个正整…

pdf合并一页怎么合并?这几种合并方法看看

pdf合并一页怎么合并&#xff1f;PDF文件是一种非常常见的文件格式&#xff0c;它可以在不同的操作系统和设备之间方便地进行共享。有时候&#xff0c;我们需要将多个PDF文件合并成一个文件。例如&#xff0c;当我们需要将多个文档合并成一个大文档时&#xff0c;或者我们需要将…

win8原版系统怎么安装?硬盘安装原版win8方法

本文来自BX教程网www.benxitj.com:整理编辑 - 原文出处 www.benxitj.com/Article/?11797/62.html 转载注明window8 对于很多电脑小白来说&#xff0c;给电脑装系统无疑是一件好比登天的事情&#xff0c;所以&#xff0c;接下来小编要来跟这部分用户分享一下硬盘安装原版win8的…