javaCV开发详解之7:让音频转换更加简单,实现通用音频编码格式转换,音频参数的转换功能(以pcm16le编码的wav转mp3为例)

本文档详细介绍了如何使用JavaCV进行音频格式转换,特别是将pcm16le编码的wav文件转换为mp3。内容涵盖音频编码转换、格式转换的基本功能,并提供代码实现和测试效果。此外,还提供了2022年最新的JavaCV音视频教程目录,帮助读者深入学习JavaCV-FFmpeg的使用。
摘要由CSDN通过智能技术生成

JavaCV免费教程目录:

JavaCV入门教程(免费JavaCV教程)

javacv实战专栏目录(2016年更新至今):

JavaCV实战专栏文章目录(2016年更新至今)

2022年最新JavaCV最新音视频教程目录:

JavaCV音视频教程目录(2022年最新JavaCV教程)


前言

之前几章把javaCV-FFmpeg中的能够实现的基本功能大致梳理了一遍,本章在之前几章基础上实现一个通用的音频编码和参数转换器

音频重采样参考请单独查看此章:

转换下面这些音频和视频,压缩包有包和源码,还有文档api. 整理资料不易,不喜欢可以自己百度 Audio decoders adpcm_4xm adpcm_adx adpcm_ct adpcm_ea adpcm_ea_r1 adpcm_ea_r2 adpcm_ea_r3 adpcm_ea_xas adpcm_ima_amv adpcm_ima_dk3 adpcm_ima_dk4 adpcm_ima_ea_eacs adpcm_ima_ea_sead adpcm_ima_qt adpcm_ima_smjpeg adpcm_ima_wav adpcm_ima_ws adpcm_ms adpcm_sbpro_2 adpcm_sbpro_3 adpcm_sbpro_4 adpcm_swf adpcm_thp adpcm_xa adpcm_yamaha alac ape atrac 3 cook dca dsicinaudio flac g726 imc interplay_dpcm liba52 libamr_nb libamr_wb libfaad libgsm libgsm_ms mace3 mace6 mp2 mp3 mp3adu mp3on4 mpc sv7 mpc sv8 mpeg4aac nellymoser pcm_alaw pcm_mulaw pcm_s16be pcm_s16le pcm_s16le_planar pcm_s24be pcm_s24daud pcm_s24le pcm_s32be pcm_s32le pcm_s8 pcm_u16be pcm_u16le pcm_u24be pcm_u24le pcm_u32be pcm_u32le pcm_u8 pcm_zork qdm2 real_144 real_288 roq_dpcm shorten smackaud sol_dpcm sonic truespeech tta vmdaudio vorbis wavpack wmav1 wmav2 ws_snd1 xan_dpcm Audio encoders ac3 adpcm_adx adpcm_ima_wav adpcm_ms adpcm_swf adpcm_yamaha flac g726 libamr_nb libamr_wb libfaac libgsm libgsm_ms libmp3lame libvorbis mp2 pcm_alaw pcm_mulaw pcm_s16be pcm_s16le pcm_s24be pcm_s24daud pcm_s24le pcm_s32be pcm_s32le pcm_s8 pcm_u16be pcm_u16le pcm_u24be pcm_u24le pcm_u32be pcm_u32le pcm_u8 pcm_zork roq_dpcm sonic sonicls vorbis wmav1 wmav2 Video decoders 4xm 8bps VMware video aasc amv asv1 asv2 avs bethsoftvid bmp c93 camstudio camtasia cavs cinepak cljr cyuv dnxhd dsicinvideo dvvideo dxa ffv1 ffvhuff flashsv flic flv fraps gif h261 h263 h263i h264 huffyuv idcinvideo indeo2 indeo3 interplayvideo jpegls kmvc loco mdec mjpeg mjpegb mmvideo mpeg1video mpeg2video mpeg4 mpegvideo msmpeg4 msmpeg4v1 msmpeg4v2 msrle msvideo1 mszh nuv pam pbm pgm pgmyuv png ppm ptx qdraw qpeg qtrle rawvideo roqvideo rpza rv10 rv20 sgi smackvid smc snow sp5x svq1 svq3 targa theora thp tiertexseqvideo tiff truemotion1 truemotion2 txd ultimotion vb vc1 vcr1 vmdvideo vp3 vp5 vp6 vp6a vp6f vqavideo wmv1 wmv2 wmv3 wnv1 xan_wc3 xl zlib zmbv Video encoders asv1 asv2 bmp dnxhd dvvideo ffv1 ffvhuff flashsv flv gif h261 h263 h263p huffyuv jpegls libtheora libx264 libxvid ljpeg mjpeg mpeg1video mpeg2video mpeg4 msmpeg4 msmpeg4v1 msmpeg4v2 pam pbm pgm pgmyuv png ppm qtrle rawvideo roqvideo rv10 rv20 sgi snow svq1 targa tiff wmv1 wmv2 zlib zmbv
Java中,使用FFmpegJavaCV库可以很容易地实现收流器的功能。收流器可以接收来自RTSP或RTMP服务器的视频流,并保存为视频文件。以下是一个基于JavaCV-FFmpeg简单实现。 首先需要添加JavaCVFFmpeg的依赖。可以在Maven中使用以下依赖: ``` <dependency> <groupId>org.bytedeco</groupId> <artifactId>javacv-platform</artifactId> <version>1.5.4</version> </dependency> ``` 接下来是收流器的实现代码: ```java import org.bytedeco.javacv.FFmpegFrameGrabber; import org.bytedeco.javacv.Java2DFrameConverter; import org.bytedeco.javacv.JavaFXFrameConverter; import java.awt.image.BufferedImage; import java.io.File; public class StreamReceiver { private FFmpegFrameGrabber grabber; private Java2DFrameConverter frameConverter; private JavaFXFrameConverter fxConverter; private boolean isRunning = false; public void start(String streamUrl, String outputFile) { try { grabber = new FFmpegFrameGrabber(streamUrl); grabber.start(); frameConverter = new Java2DFrameConverter(); fxConverter = new JavaFXFrameConverter(); isRunning = true; while (isRunning) { BufferedImage image = frameConverter.convert(grabber.grab()); if (image != null) { fxConverter.convert(image); } } grabber.stop(); grabber.release(); } catch (Exception e) { e.printStackTrace(); } } public void stop() { isRunning = false; } public static void main(String[] args) { StreamReceiver receiver = new StreamReceiver(); receiver.start("rtmp://live.hkstv.hk.lxdns.com/live/hks", "output.mp4"); } } ``` 在这个实现中,`start`方法会创建一个`FFmpegFrameGrabber`对象,并使用给定的`streamUrl`开始抓取。然后使用`Java2DFrameConverter`将抓取的帧转换为`BufferedImage`对象,最后使用`JavaFXFrameConverter`将`BufferedImage`转换JavaFX中的`Image`对象。在循环中,我们检查`BufferedImage`是否为空,以确保我们只保存有内容的帧。最后,当`stop`方法被调用时,循环中止并关闭抓取器。 可以通过调用`StreamReceiver`的`start`方法启动收流器,并使用RTMP或RTSP URL作为参数。收流器将不断抓取视频流,并将其保存到指定的输出文件中。
评论 34
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

eguid_1

感谢支持eguid原创技术文章

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值