第7课 利用FFmpeg将摄像头画面与麦克风数据合成后推送到rtmp服务器

这篇具有很好参考价值的文章主要介绍了第7课 利用FFmpeg将摄像头画面与麦克风数据合成后推送到rtmp服务器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

上节课我们已经拿到了摄像头数据和麦克风数据,这节课我们来看一下如何将二者合并起来推送到rtmp服务器。推送音视频合成流到rtmp服务器地址的流程如下:

1.创建输出流

//初始化输出流上下文
avformat_alloc_output_context2(&outFormatCtx, NULL, "flv", outFileName);
outFormat = outFormatCtx->oformat;
outFormat->video_codec = AV_CODEC_ID_H264;
outFormat->audio_codec = AV_CODEC_ID_AAC;

2.创建视频编码器

vEncodec = avcodec_find_encoder(AV_CODEC_ID_H264);
vEncodeCtx = avcodec_alloc_context3(vEncodec);
vEncodeCtx->codec_id = vEncodec->id;
vEncodeCtx->codec_type = AVMEDIA_TYPE_VIDEO;
vEncodeCtx->bit_rate = 1000000;
vEncodeCtx->width = backWidth;
vEncodeCtx->height = backHeight;
vEncodeCtx->time_base = { 1, 25 };
vEncodeCtx->framerate = { 25, 1 };
vEncodeCtx->gop_size = 25 * 10;
vEncodeCtx->pix_fmt = *vEncodec->pix_fmts;
vEncodeCtx->max_b_frames = 0;
vEncodeCtx->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
av_dict_set(&vEncodeOpts, "profile", "baseline", 0);
av_dict_set(&vEncodeOpts, "preset", "ultrafast", 0);
av_dict_set(&vEncodeOpts, "tune", "zerolatency", 0);
avcodec_open2(vEncodeCtx, vEncodec, &vEncodeOpts);

3.创建音频编码器

//音频编码器
aEncodec = avcodec_find_encoder(AV_CODEC_ID_AAC);;
aEncodeCtx = avcodec_alloc_context3(aEncodec);
aEncodeCtx->bit_rate = 64000;
aEncodeCtx->sample_rate = 44100;
aEncodeCtx->block_align = 0;
aEncodeCtx->sample_fmt = AV_SAMPLE_FMT_FLTP;
aEncodeCtx->channel_layout = AV_CH_LAYOUT_STEREO;
aEncodeCtx->channels = 2;
aEncodeCtx->time_base.num = 1;
aEncodeCtx->time_base.den = aEncodeCtx->sample_rate;

aEncodeCtx->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
avcodec_open2(aEncodeCtx, aEncodec, NULL);

4.创建输出视频流

//创建输出视频流
videoStream = avformat_new_stream(outFormatCtx, vEncodec);
videoStream->id = outFormatCtx->nb_streams - 1;
videoStream->codecpar->codec_tag = 0;
avcodec_parameters_from_context(videoStream->codecpar, vEncodeCtx);

5.创建输出音频流

//创建输出音频流
audioStream = avformat_new_stream(outFormatCtx, NULL);
audioStream->codecpar->codec_tag = 0;
audioStream->id = outFormatCtx->nb_streams - 1;
avcodec_parameters_from_context(audioStream->codecpar, aEncodeCtx);

6.打开输出流并写入文件头

//打开输出流
av_dump_format(outFormatCtx, 0, outFileName, 1);
ret = avio_open2(&outFormatCtx->pb, outFileName, AVIO_FLAG_READ_WRITE, nullptr, nullptr);

//写文件头
ret = avformat_write_header(outFormatCtx, NULL);

7.分别封装音视频帧并送入编码器

ret = avcodec_send_frame(vEncodeCtx, deVideoFrame);
ret = avcodec_receive_packet(vEncodeCtx, &enVideoPacket);

ret = avcodec_send_frame(aEncodeCtx, deAudioFrame);
ret = avcodec_receive_packet(aEncodeCtx, &enAudioPacket);

8.分别推送音视频流

if (enVideoPacket.size > 0){
 ret = av_interleaved_write_frame(outFormatCtx, &enVideoPacket);				
}

if (enAudioPacket.size > 0){
 ret = av_interleaved_write_frame(outFormatCtx, &enAudioPacket);				
}

9.播放测试rtmp流

打开vlc或第一章写好的rtmp播放器测试,对着麦克风说话如果能从播放器听到声音并看到图像说明成功。

第7课 利用FFmpeg将摄像头画面与麦克风数据合成后推送到rtmp服务器,opencv,C++,ffmpeg,ffmpeg,c++,音视频,opencv文章来源地址https://www.toymoban.com/news/detail-774928.html

到了这里,关于第7课 利用FFmpeg将摄像头画面与麦克风数据合成后推送到rtmp服务器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • web端调用本地摄像头麦克风+WebRTC腾讯云,实现直播功能

    视频直播技术大全、直播架构、技术原理和实现思路方案整理 视频采集端: 1、视频采集:使用摄像头设备获取实时视频流。 2、视频处理: 对采集到的视频进行处理,可以包括美颜、滤镜、水印等效果的添加。 3、音视频编码压缩: 将处理后的音视频数据进行编码压缩,常

    2024年02月10日
    浏览(50)
  • 如何让Chrome浏览器允许http网站打开摄像头和麦克风

    问题来源: 本地运行的项目调用摄像头好用 访问线上地址,发现调用摄像头的方法都不存在。 问了度娘,发现该问题与浏览器的安全策略有关。出于安全考虑,浏览器是不允许随便开启摄像头的,https协议下方可开启。 这一项功能要用到谷歌浏览器的实验性功能,谷歌浏览

    2024年02月17日
    浏览(70)
  • MacOS 为指定应用添加指定权限(浏览器无法使用摄像头、麦克风终极解决方案)

    起因:需要浏览器在线做一些测评,但我的 Chrome 没有摄像头/麦克风权限,并且在设置中是没有手动添加按钮的。 我尝试了重装软件,更新系统(上面的 13.5 就是这么来的,我本来都半年懒得更新系统了),都没有任何用。 系统版本:MacOS 13.5.1(需要开启 sip,可参考 macOS

    2024年02月07日
    浏览(80)
  • c 摄像头利用v4l2直接生成avi视频(不利用ffmpeg)

    自定义avi结构头文件。现在不能实时显示摄像头画面,准备参照fim(终端中显示图片),直接对显示framebuffer操作,显示视频。不用qt等。 生成的视频根据机子的性能不同,诂计要手动调一下生成视频的帧率。 播放: $ aplay  musicdemo.wmv 录音: $ arecord -c 2 -r 44100 -f S16_LE musicd

    2024年02月08日
    浏览(42)
  • javacv基础02-调用本机摄像头并预览摄像头图像画面视频

    引入架包: 运行效果: 注意: 1、maven依赖后,会导致整个项目工程打包发布后的体积变得十分巨大 原因是ffmpeg和opencv两个依赖默认会把android,ios,linux,macos,windows以及各自不同cpu芯片下,86/64等所有版本的Jar会全部依赖进来,项目打包后体积剧增500M+ 解决方法也比较简单

    2024年02月11日
    浏览(60)
  • 摄像头画面作为电脑桌面背景

    1. 创建文件main.pyw,文件内容 2. 创建文件requirements.txt,文件内容 3. 安装依赖 4. 运行 双击main.pyw 防火布 github下载代码 从上面第3步开始执行

    2024年02月03日
    浏览(47)
  • ☀️将大华摄像头画面接入Unity 【1】配置硬件和初始化摄像头

    目前的设想是后期采用网口供电的形式把画面传出来,所以这边我除了大华摄像头还准备了POE供电交换机,为了方便索性都用大华的了,然后全都连接电脑主机即可。 这边初始化摄像头需要用到大华的Configtool软件,下载地址如下。 全部-浙江大华技术股份有限公司 (dahuatech

    2024年02月21日
    浏览(118)
  • 为什么监控摄像头画面不如手机拍摄视频画面清晰

    一天和一个做餐饮的朋友吃饭聊天,他提出一个问题,几百块的监控摄像头就是纯粹做监控功能 ,视频拍摄的画面为什么还没有几百元的手机拍摄的视频画面清晰,对于此特意查了一下技术资料,整理一下,以备下次再详细忽悠! 当我们看到监控摄像头的画面与手机拍摄视

    2024年02月01日
    浏览(64)
  • 如何获取当前摄像头实时画面(或说图片)

    可以使用所在平台提供的摄像头接口或第三方库来获取当前摄像头实时画面(或图片),具体实现方式可能因不同平台和库而异。以下是几个常见平台的示例方法: 在 Windows 平台上,可以使用 DirectShow 或 Media Foundation API 获取摄像头实时画面。 在 macOS 平台上,可以使用 AVFo

    2024年02月10日
    浏览(55)
  • 消除Python OpenCV显示摄像头画面的延迟

    用 Python 通过 OpenCV显示摄像头画面时,如果对视频帧进行一些处理,常常会遇到一个问题,显示的画面比眼睛看到真实场景慢几秒甚至更多,给用户的体验不好。 画面延迟与卡顿的区别 卡顿 是指视频播放时,出现一顿一顿的现象,不流畅,通常每秒播放速率少于10帧就可以

    2024年02月11日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包