Android下RTMP推流h264和aac数据

RTMP服务器搭建参考https://blog.youkuaiyun.com/wangchao1412/article/details/103641770

h264格式,aac格式,rtmppacket格式参考https://blog.youkuaiyun.com/wangchao1412/article/details/103642403

环境:

RtmpDump  c文件少,可以直接引入源文件,配置针对rtmpdump的cmakelist。

ndk 交叉编译android 平台下的 faac  x264静态库,引入。

faac作用:将AudioRecord录制的pcm编码成aac。

x264作用:将camera2输出的原始图像,编码成h264.

rtmpdump:连接rtmp服务器,将aac和h264各自打包RtmpPacket,实现推流。

 

Java层AudioRecord和Camera2就不介绍了,直接进入native中开始讲解。

先看一下几个native 方法的作用。

public class RtmpPush {
    static {
        System.loadLibrary("rtmpPush");
    }

    /**
     * 创建x264编码类和faac编码类
     */
    public static native void native_init();

    /**
     * 连接rtmp服务器,推流开始
     * @param path
     */
    public static native void native_start(String path);

    /**
     * 初始化x264配置
     * @param width
     * @param height
     * @param fps
     * @param bitrate
     */
    public static native void native_setVideoEncInfo(int width, int height, int fps, int bitrate);

    /**
     * yuv输入编码,推流
     * @param ydata
     * @param yLen
     */
    public static native void native_pushVideo(
            byte[] ydata, int yLen
    );

    public static native void native_stop();

    public static native void native_release();

    /**
     * 初始化faac配置
     * @param sampleRateInHz
     * @param channels
     */
    public static native void native_setAudioEncInfo(int sampleRateInHz, int channels);

    /**
     * 获取faac 输入buffer的大小,配置audioRecord的输入buffer大小
     * @return
     */
    public static native int getInputSamples();

    /**
     * pcm编码aac,推流
     * @param data
     */
    public static native void native_pushAudio(byte[] data);

}
native_init
extern "C"
JNIEXPORT void JNICALL
Java_com_example_rtmppushdemo_RtmpPush_native_1init(JNIEnv *env, jclass instance) {

    videoChannel = new VideoChannel();
    videoChannel->setVideoCallBack(callback);

    audioChannel = new AudioChannel();
    audioChannel->setAudioCallBack(callback);
    packets.setReleaseCallback(releasePackets);

}

创建VideoChannel和AudioChannel。

VideoChannel:负责编码h264和组装rtmp。

AudioChannel:负责编码aac和组装rtmp。

native_start
void *task_start(void *args) {
    char *url = static_cast<char *>(args);
    RTMP *rtmp = 0;
    do {
        rtmp = RTMP_Alloc();

        if (!rtmp) {
            LOGE("alloc rtmp失败");
            break;
        }

        RTMP_Init(rtmp);
        in
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值