• GStreamer appsrc 等插件实现视频音频混流,录制和推流


    参考

    使用 GStreamer appsrc 等插件实现视频音频混流,录制和推流
    http://t.zoukankan.com/luckbird-p-GStreamer_appsrc.html

    目前在做的在线直播教室,需要将老师分享的屏幕和老师的声音、学生的声音录制为一个视频文件,以便学生上课后还可以再看回放。

    直播服务我们采用的是腾讯的视频服务,有现成的 SDK 可以用。但 SDK 自带的录制接口满足不了我们的需求,考察了 ffmpeg 和 GStreamer 后,决定在项目中使用 GStreamer 来实现。

    在开始编写代码以前,先用命令行进行测试,命令行如下:

    gst-launch-1.0.exe -v --gst-debug-level=4 flvmux name=mux ! tee name=t ! queue ! filesink name=file location=test.flv
    t. ! queue ! rtmpsink location=“rtmp://live.abc.com/live/…”
    adder name=mix ! queue ! audiorate ! audioconvert ! voaacenc ! mux.audio
    videotestsrc name=screen_src ! queue ! videorate ! x264enc ! mux.video
    audiotestsrc name=send_audio_src ! queue ! audiorate ! mix.
    audiotestsrc wave=5 name=receive_audio_src ! queue ! audiorate ! mix.

    命令看起来有点复杂,但其实逻辑挺简单的,看下面这个逻辑图就比较容易理解了(点击查看大图)
    上面的命令中的推流地址需要替换为你的推流地址,如果没有,可以先把下面这部分内容去掉不推流

    t. ! queue ! rtmpsink location=“rtmp://live.abc.com/live/…”
    另外这个命令是在 Windows 中的 MINGW64 的 bash 环境里面运行的, 如果在 Windows 的 cmd 环境中运行,把每行最后的 和换行去掉就可以了。

    上面命令中用到了几个关键的插件,分别解释一下:

    adder: 音频混流,将两路音频混为一路

    voaacenc:音频编码,将原始的音频流编码为 aac 格式

    x264enc:视频编码,将原始的视频流编码为 h264 格式

    flvmux:flv 组装,将视频和音频组装在一起

    tee:分流器,将一路输入变为两路输出,以分别进行后续的处理。一路保存为文件,一路进行推流

    filesink:文件存储,将输入数据存储到指定的文件中

    rtmpsink:推流,将输入数据推流到指定的视频服务器

    在这里插入图片描述

  • 相关阅读:
    无线Mesh自组网方案,CV5200无线模组应用,支持高清数据远距离传输
    基于图搜索的规划算法之A*家族(六):D* Lite算法
    1017 Queueing at Bank
    WPF(七) Prism框架基本特性
    HarmonyOS分布式文件系统开发指导
    力扣题库3.无重复字符的最长子串
    LeetCode206.反转链表
    如何将图片识别为可编辑的Word文件
    曼哈顿距离和切比雪夫距离的转换
    Unity UGUI的RawImage(原始图片)组件的介绍及使用
  • 原文地址:https://blog.csdn.net/wowocpp/article/details/126360092