Android平台FFmpeg实现rtmp推流-C++的实现

Android平台FFmpeg实现rtmp推流-C++的实现,第1张

视频编码有几种方式:
1硬编码,使用MediaCodec实现
2软编码,使用FFmpeg或者libx264库来实现。

本文分享在Android平台视频编码-软编码的实现,也就是用FFmpeg来实现视频的编码,rtmp推流到服务器上,相机采集视频将在下一篇文章分享。

流媒体服务器使用 nginx-rtmp-module 来进行搭建。

本文所使用FFmpeg的版本是41,关于FFmpeg编译成Android平台so库如果有需要,我将在下一篇文章分享说明。

视频编码比较耗cpu,上传视频数据的会耗网络io,所以需要开启新线程去处理,这里我用HandlerThread来处理视频的编码上传。

初始化编码相关 *** 作
这里我们使用的是FFmpeg,所以在编码前我们会先做一些初始化以及参数设置工作。
FFmpeg初始化
av_register_all()
创建输出格式上下文
avformat_alloc_output_context2()
获取编码器
avcodec_find_encoder(AV_CODEC_ID_H264) 获取H264的编码器
设置编码器参数

使用给定的编码器和参数初始化编码上下文
avcodec_open2(pCodecCtx, pCodec, &param)
创建视频流
video_st = avformat_new_stream(ofmt_ctx, pCodec)
打开输出上下文
avio_open(&ofmt_ctx->pb, out_path, AVIO_FLAG_READ_WRITE)
写入输出头信息
avformat_write_header(ofmt_ctx, NULL)

像素格式转换
AV_PIX_FMT_YUV420P,它是纯平面存储。总共三个平面,分别存放,Y、U、V数据。
当图像宽是width,高是height时,Y分量的大小就是width×heitht,而U是width×heitht/4,V也是U是width×heitht/4。
H264编码
首先我们需要了解两个数据结构AVFrame、AVPacket
AVFrame存放的是原始数据、AVPacket存放的是编码后的数据。
创建AVPacket
av_new_packet(&enc_pkt, picture_size);
开始编码
ret = avcodec_encode_video2(pCodecCtx, pFrameYUV);
输出一帧编码后的视频数据
ret = av_write_frame(pCodecCtx, &enc_pkt);

释放资源

小伙伴们有疑问的可以在下方评论区评论。

直播的火爆让各行各业对直播这块新市场垂涎不已,而进军直播市场的第一步——直播系统源码却让企业头疼不已,那么直播系统源码如何进行开发呢?一、媒体模块:1、采集:通过SDK接口,直接从用户设备采集视频、音频等数据,视频采样数据一般采用RGB或YUV格式、音频采样数据一般采用PCM格式。2、预处理:对采集到的数据通过SDK层面接口进行润化处理,主要是图像方面的处理,如美颜、水印、滤镜等,GPU优化提速,平衡手机功耗及效果。3、编码:对采集到的数据进行压缩编码,比较常用的视频编码为H264,音频为AAC,在分辨率、帧数、码率等参数设计上找到最佳平衡点,使之匹配推流所需协议,提高上传效率。4、推拉流:推流就是将压缩后的音视频变为流数据,上传至服务器。拉流即通过播放端获取码流,从服务端拉取支持以RTMP、>

开发一个直播app其实不需要太多的钱,和一般的APP一样,是根据实际功能需求的页面总数来估算价格的,比如说一个页面800元,当然只有几个功能的话一定会有个底价,就像打车也有个起步价,毕竟不管再少的功能

也要配备后台开发人员,前端开发人员,ios和安卓各一个,还有UI和产品经理,这是基本配置。

直播app这个核心模块一般是选择第三方的SDK接入,就像短信接入,聊天接入一样都有相关模块的服务商,相关收费标准需要咨询SDK服务,山东趣构网络科技有限公司都会给你搞定,费用是开发之外的,因为很多SDK都是按数量或者流量计费的。当然你也可以选择自己研发SDK,不过费用会非常高,技术门槛也很高,即使开发出来没有经过长时间大量的用户检验是无法提供完善服务的,市面上除了直播巨头拥有自己的SDK,其他的基本上都是调用第三方SDK。开发费用是可以量化的,需要投入的可能是APP上线之后的推广营销费用,这是非常巨大的一笔投入,当然也有很多免费的渠道,需要把各个应用市场的优化工作做好。

企业直播平台

相比于传统直播服务平台,企业直播APP平台不管是在硬件设备上还是软件上,实现的难度更加高。

主要技术功能模块主播端:把主播实时录制的视频,经过(采集、美颜处理、编码)

推送到服务器服务器:处理(转码、录制、截图、鉴黄)后分发给用户播放端播放器:

获取服务器地址,进行拉流、解码、渲染互动系统:聊天室、礼物系统、赞主播端:LFLiveKit

已包含采集、美颜、编码、推流等功能服务器:nginxrtmp服务器免费开源,能搭建本地电脑上,支持RTMP协议,满足直播需求。播放端:ijkplayer视频直播框架封装很完善只要有url,就可以实时播放由于涉及音视频的编码解码、美颜功能的算法,帧的处理等很多问题,能从底层自己开发的完整功能的绝对是大牛!不过正是有这些大牛们的奉献,我们不需要处理繁琐的底层问题,一些封装好的库可以完美实现。

1、利用第三方直播SDK快速的开发梦网视频云:提供以实时轻视频技术为核心,开放智能视频、VideoCDN、VR、视频编码、视频渲染、分布式缓冲、软交换、多屏播放等前沿视频技术。

帮您从容应对业务突发峰值。广泛应用于游戏直播、娱乐直播、泛生活直播、教育类、远程医疗、

企业远程视频会议等典型场景。提供一站式视频解决方案,帮助企业一个星期搭建完整的视频直播平台。

同时结合领先的人工智能技术,开放智能图像识别、视频特效、黄反审核功能,让视频内容更丰富,更安全。

梦网视频云是专为企业平台打造的视频服务和一站式实现SDK/API端到端直播场景的企业级直播云服务平台。

2、自研还是使用第三方直播SDK开发?自研:对于一个初创公司或团队来讲,自研直播不管在技术门槛、CDN、

带宽上都是有很大的门槛的,而且需要耗费大量的时间和成本才能做出成品,不利于前期发展。

第三方SDK开发:开发周期短,前期投入少,从长远看,第三方费用较高,占很大一笔支出,相对来说自研可以节省成本,技术成面比直接用SDK相对可控。

先,服务器,是最基本的,也是最重要的,系统只有搭建在服务器上才能运作。前期基本的服务器建议阿里云或者腾讯云或者其他支持rtmp协议的服务器,推荐4核8G2M带宽,系统linux cent os7x(一般为最新的76)可支持前期基本运营,后期可根据在线人数升级服务器。
域名:域名一般建议使用运营者自己实名备案的,如果是购买的别人的,在运营中可能会掉,域名掉了,APP也就访问不了了。只有把域名解析到服务器上,网络才能找到你的。也是必需的
短信验证码:登录验证,市场上很多的验证码提供商,价格也是很便宜。
其他登录方式,如微信快捷登录,QQ登录等,需要开通QQ互联及微信开放平台的授权。
充值支付:最为常见的就是微信支付和支付宝支付,这两种方式都需要用到公司资质也就是营业执照,微信支付,需要在微信开放平台申请微信支付的商户号,(微信公众号不可)审核费用,每年300元。账期需要看自己的APP种类,一般分为T+1和T+7等,具体的可以咨询微信官方。支付宝支付是免费的,需要获取开发者能力,配置相关的参数,回调等。其他的三方支付,需要提供三方支付的接口,及文档等信息。不过一般不建议三方支付,有丢单的情况。
腾讯云账号:腾讯云在社交方面还是很强大,现在大部分的社交APP还是集成了腾讯的SDK。腾讯的产品首次使用会有一段时间的免费试用,试用过后就需要付费了。
美颜:市面上也是有很多的美颜商家,提供专业 美颜服务,具体的可以和APP开发商商议。
任何一款直播平台开发都会用到很多的技术,开发商也是一样,会在一套APP内集成多个三方的SDK。在各个领域都有专业的服务商,如果全套的服务都是自己开发,受众面稳定及兼容性也是非常难以做到最完美的,全部自研的成本将会无限提高。
做直播平台,关键是看个人怎么运营,怎么能增加用户的粘性,让用户能够可以持续给平台提供资金流,优质的主播是必不可少的,但是平台的运营策略和推广力度也会起到至关重要的作用。

这个比较麻烦,需要先从MP4中读取出H264和音频裸流,尤其是要注意关键帧的查找,然后用librtmp推送给RED5。不知道你为何要这样做,既然已经是文件了,直接把文件放到RED的相应目录下面不就可以了么


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zz/10285351.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-07
下一篇2023-05-07

发表评论

登录后才能评论

评论列表(0条)

    保存