10

7×24无人值守直播推流软件开发实战,一文为你揭开视频推流的底层原理(附源码) - 失足...

 11 months ago
source link: https://www.cnblogs.com/blogtimes/p/17771330.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

7×24无人值守直播推流软件开发实战,一文为你揭开视频推流的底层原理(附源码)

你有看到过那种不间断型的、循环播放视频音乐的直播间吗?或者那种直播播放电影的直播间?还有层出不穷的文章,类似如下标题:

“如何搭建一个24小时不间断的直播间?躺入xxxx元!”

“24小时电影直播间,每天到账xxx~xxxx,不出镜副业,人人可做!”

“50块的云服务器直播推流让我月入过千?轻轻松松打造一个属于自己的被动收入”

“无人直播循环播放x个小时羊了个羊累计成交额xxxx元”

看到这些文章标题,是不是心动了?慢着,本文不是要写如何使用这些技术赚钱,而是探索这些赚钱的技术到底是啥原理、是怎么做到的。

直播:打开直播软件,然后一个人对着摄像头,拿着麦克风,穿着超短裙,翩翩起舞,然后咱们开心的欣赏。

直播推流:一个人对着摄像头,拿着麦克风,穿着超短裙,翩翩起舞,并使用第三方软件将实时画面推到直播间,然后咱们开心的欣赏。

无人值守直播推流:提前把视频录制好,保存成文件,比如mp4,想要开播的时候,使用自研软件把这个mp4文件推给我们开心的欣赏。

以上有啥不同呢?简单来说,正常的直播:我们看直播的时候,主播正在跳;无人值守直播:我们看直播的时候,主播实际正在睡大觉。

基于以上分析,我们开发一个软件,只要我们准备好要播出的视频:

想什么时间播就什么时间播;

想重复播放几遍就重复播放几遍;

直播的时候,我们可以去睡觉、撸啊撸、约会、上班......

我们以B站为例,来分析该如何实现以上软件。

打开B站开播设置,我们注意下面红框中的说明,实际上可以将我们要开发的软件看做是“第三方软件”,红框中提到的服务器地址和推流码,就是我们要用到的参数。通俗的理解为,我们将准备好的视频数据,推到这个服务器地址,即可实现实时直播的能力。

2395704-20231018092327655-1053432097.png

我们点击“开始直播”,可以看到下图红框里的内容,即是我们需要的服务器地址和密码:

2395704-20231018092358549-1970731586.png

接下来该如何推流呢?轮到大名鼎鼎的ffmpeg上场了。这是一个功能强大的,可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序,这个工具技术成分太高了,具体有多高,我估计得有三四层楼那么高。

所以,到目前为止,我们的直播推流实现步骤就确定了:

第一步、把视频提前制作好

第二步、安装ffmpeg软件

第三步、找到我们的推流服务器和秘钥

第四步、调用ffmpeg的功能,将视频推到直播间去

第五步、把冰箱门关上......,不是,欣赏一下我们的直播间

以上的实现方案确定了,编码阶段是最简单的,咱们可以使用任何语言进行编码实现,甚至使用几条CMD命令或Shell命令都能实现。

接下来我使用Java实现,顺便做一个“友好的”配置界面:

2395704-20231018092437118-1583539790.png

页面代码就不贴了,下面是后端代码:

@RequestMapping("/live")
@ResponseBody
public Result<String> live(@RequestBody LiveConfig live){
    List<String> commands = new ArrayList<>();
    commands.add(ffmpegPath);
    commands.add("-re");
    commands.add("-stream_loop");
    commands.add(live.getLoop().toString());
    commands.add("-i");
    commands.add(baseDir+"/test.mp4");
    commands.add("-vcodec");
    commands.add("copy");
    commands.add("-acodec");
    commands.add("copy");
    commands.add("-f");
    commands.add("flv");
    commands.add(live.getUrl()+live.getSecret());
    logger.info(StringUtils.join(commands," "));
    ProcessBuilder builder = new ProcessBuilder();
    builder.redirectErrorStream(true);
    builder.command(commands);
    Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {
            InputStream inputStream = null;
            try {
                Process process = builder.start();
                inputStream = process.getInputStream();
                logger.info("开始推流");
                BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
                String line;
                while ((line = reader.readLine()) != null) {
                    logger.info(line);
                }
                int result=process.waitFor();
                logger.info("推流结果:{}",result);
            } catch (Exception e) {
                logger.info("推流失败:{}", ExceptionUtils.getStackTrace(e));
            }finally {
                if (inputStream != null){
                    try {
                        inputStream.close();
                    } catch (IOException e) {

                    }
                }
            }
        }
    });
    thread.start();
    return Result.success(null);
}

我的直播间就这样愉快的开播了:

2395704-20231018092624704-1623449181.png

接下来部署到我的腾讯云,让我的无人值守直播间开播吧,它会无休无止的播、吃饭播、睡觉播、工作播、运动播......反正就是各种播。

我手上本来就有一台腾讯云服务器,直接拿来用即可。作为一个程序员,云服务器现在应该是标配了,学生可以用来学习,菜鸟可以用来练手,老鸟玩点有趣的东西偶尔赚点小钱。你如果想买一台云服务器来玩儿,链接直达:

https://cloud.tencent.com/act/cps/redirect?redirect=5186&cps_key=814b8b5d55ef58acc94a1b6bf43d5a2b&from=console

无人值守、直播推流听起来高大上,实际上,就这么两点:

第一、拿到推流接口

第二、上ffmpeg,开推

本次分享就到这里,赶紧开启你的无人值守直播吧。

源码猛点(免积分):https://download.csdn.net/download/u012071890/88437963

或者这里:https://github.com/shenmejianghu/bili-downloader


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK