RTMP使用流程文述

RTMP使用流程文述

在现在网络流媒体的协议中,最常见的就为RTMP,在一搬的工程或项目想要实现rtmp,需要借助rtmpdump来实现,我们可以去rtmpdump官网去下载资源包,去集成在我们的项目中,用以实现rtmp

在android的音视频项目中,我们在获取到视频数据后,需要利用rtmpdump主要做两件事,1是建立连接,2是发送数据。

(ex:在安卓中如果解码速度和发送数据包速度差异过大,可以采用数据队列存储的方式,例如LinkedBlockingQueue)

一、建立连接

1,在native层,先用JNI的env的GetStringUTFchars方法将Java里的String转换成C里面的字符串char

2, 使用RTMP_Alloc得到一个实例的对象rtmp

3, 使用RTMP_Init方法将rtmp传进去进行初始化

4,设置rtmplink.timeout超时时间,一般为10

5,使用RTMP_SetupURL方法去设置连接路径,将rtmp实例化对象和url作为参数传入进去,会返回一个int值。如果返回0即为FALSE,返回1就说明设置成功

6,使用RTMP_Enablewrite方法开启可写

7, 使用RTMP_connect方法开始连接,如果返回为1,代表初步连接成功

8,使用RTMP_connectstream,如果他连接成功,则代表真的成功

二、发送数据

1,在native层,首先拿到从Java层中的一条视频原始数据包byte data

2, 解析此byte data buf中的前四个字节,如果是0x67,则代表是spspps配置帧,一般来说一个视频的spspps只会生成一次,所以我们要先将他缓存起来,不需要推流,待会和I帧一起推流

3,如果解析到的是0x65则代表是I帧,这时需要将spsppsI帧一起发送

4,如果是其他类型则为B帧或P帧,直接进行包装发送,需要按照rtmp的规则进行包装后进行发送

5,需要注意,I帧,BP帧还有sps_pps帧不能直接进行发送,需要按照rtmp的规则进行包装后进行发送,就是类似I帧前加0x17 加三个0x00 然后四个字节长度,后跟数据类似的这种协议规则

6,使用RTMP_SendPacket 进行发送,需要在发送完后使用RTMPacket_Free进行释放

三、推流音频数据

1,将音频开源FAAC搭建在项目中

2,通过AudioRecord将麦克风采集的 PCM 音频采样编码成 AAC 格式音频 , 并封装到 RTMP 包中 , 推流到客户端

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值