java实现g711a打包发送rtp(二)

文章介绍了如何利用JavaCV库和FFmpeg的Java接口将音频文件(如.wav)转码为G711a格式,并通过RTP协议推送到指定的IP地址和端口。示例代码展示了设置编码器参数、创建FFmpegFrameGrabber和FFmpegFrameRecorder对象以及抓取、转换和记录音频帧的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        上一篇文章发送g711a的rtp包,要求原始的音频文件已经是进行了g711a转码好的.这篇文章介绍通过javacv实现音频文件转码为g711a并实现推流.

maven依赖

  <!-- 媒体只用到以下两个,javacv、ffmpeg -->
        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacv</artifactId>
            <version>1.5.6</version>
        </dependency>

        <!-- ffmpeg全平台引入 -->
        <!--        <dependency>-->
        <!--            <groupId>org.bytedeco</groupId>-->
        <!--            <artifactId>ffmpeg-platform</artifactId>-->
        <!--            <version>4.4-1.5.6</version>-->
        <!--        </dependency>-->
        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>ffmpeg</artifactId>
            <version>4.4-1.5.6</version>
            <classifier>windows-x86_64</classifier>
        </dependency>
        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>ffmpeg</artifactId>
            <version>4.4-1.5.6</version>
            <classifier>linux-x86_64</classifier>
        </dependency>

示例代码:

package com.hisql.iot.javacv.util;


import org.bytedeco.ffmpeg.global.avcodec;
import org.bytedeco.ffmpeg.global.avutil;
import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.FFmpegFrameRecorder;
import org.bytedeco.javacv.Frame;

import java.util.Date;

public class Wav2PCMARtp {
    public static void main(String[] args) throws Exception {
        String              inputFilePath  = "d:\\audio.wav";
        String              rtpDestination = "192.168.2.167";
        int                 rtpPort        = 8000;
        FFmpegFrameRecorder recorder       = new FFmpegFrameRecorder("rtp://" + rtpDestination + ":" + rtpPort, 1);
        //recorder.setAudioCodec(avcodec.AV_CODEC_ID_PCM_MULAW); // G711a u-law
        recorder.setAudioCodec(avcodec.AV_CODEC_ID_PCM_ALAW); // G711a a-law
        recorder.setSampleRate(8000);
        recorder.setSampleFormat(avutil.AV_SAMPLE_FMT_S16);
        recorder.setAudioBitrate(64000);
        recorder.start();
        FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(inputFilePath);
        grabber.start();
        Frame frame;

            while ((frame = grabber.grabSamples()) != null) {
                long timestamp = grabber.getTimestamp();
                System.out.println(">>>>>>>>" + new Date(timestamp));
                recorder.setTimestamp(timestamp);
                recorder.record(frame);

            }
        recorder.stop();
        grabber.stop();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值