android rtmp推流,Android使用libRtmp直播推流

本文详细介绍了如何在Android中使用libRtmp进行RTMP直播推流,包括RTMP的初始化、H264与AAC包的封装,以及如何从MediaCodec获取SPS和PPS信息。通过示例代码,展示了推流的关键步骤。
摘要由CSDN通过智能技术生成

初始化rtmp

//分配空间

RTMP *rtmp = RTMP_Alloc();

//初始化

RTMP_Init(rtmp);

//设置推流URL

RTMP_SetupURL(rtmp, url);

//设置可写状态

RTMP_EnableWrite(rtmp);

//链接服务器

RTMP_Connect(rtmp, NULL);

//链接流

RTMP_ConnectStream(rtmp, 0);

//循环推流(AAC、H264) //开始推流

while(1){

int result = RTMP_SendPacket(rtmp, packet, 1);

RTMPPacket_Free(packet);

free(packet);

packet = NULL;

}

//关闭链接

RTMP_Close(rtmp);

//释放资源

RTMP_Free(rtmp);

rtmp=NULL;

H264包封装。在发送每一帧关键帧之前得先发送SPS、PPS帧信息,发送的每一帧(I、P、SPS、PPS)数据得添加头部信息。

2.1 SPS PPS数据

void RtmpPush::pushSPSPPS(char *sps, int spsLen, char *pps, int ppsLen) {

if (!this->queue) return;

int bodySize = spsLen + ppsLen + 16;

RTMPPacket *rtmpPacket = static_cast(malloc(sizeof(RTMPPacket)));

RTMPPacket_Alloc(rtmpPacket, bodySize);

RTMPPacket_Reset(rtmpPacket);

char *body = rtmpPacket->m_body;

int i = 0;

//frame type(4bit)和CodecId(4bit)合成一个字节(byte)

//frame type 关键帧1 非关键帧2

//CodecId 7表示avc

body[i++] = 0x17;

//fixed 4byte

body[i++] = 0x00;

body[i+

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值