Linux系统实现youtube推流直播

系统:centos-7

软件:FFMPEG, youtube-dl

1. 安装FFMPEG

创建并cd到一个目录,下载最新的FFMPEG(下面是64位,32位需分别下载 https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-i686-static.tar.xz https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-i686-static.tar.xz.md5)

$ cd /home/john

$ wget https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-amd64-static.tar.xz

$ wget https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-amd64-static.tar.xz.md5

下载完成后,可以检查完整性

$ md5sum -c ffmpeg-git-amd64-static.tar.xz.md5
ffmpeg-git-amd64-static.tar.xz: OK

解压(有可能需要解压两次,我解压一次就可以了),如果遇到“tar (child): xz: Cannot exec: No such file or directory”,需安装xz,命令“yum -y xz”

$ tar xvf ffmpeg-git-amd64-static.tar.xz

现在得到目录”ffmpeg-git-20180203-amd64-static“(日期为最新版本日期,使用命令ls -a“查看当前目录所有目录文件)

$ ls ffmpeg-git-20180203-amd64-static
ffmpeg ffprobe GPLv3.txt manpages model qt-faststart readme.txt

阅读readme.txt(hit "q" to exit out of "less")

$ less ffmpeg-git-20180203-amd64-static/readme.txt

使用相对路径

$ pwd
/home/john

$ ./ffmpeg-git-20180203-amd64-static/ffmpeg
ffmpeg version N-89948-ge3d946b3f4-static https://johnvansickle.com/ffmpeg/ Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 6.4.0 (Debian 6.4.0-11) 20171206
(snipped output to save space)

或者使用绝对路径

$ pwd
/home/john

$ /home/john/ffmpeg-git-20180203-amd64-static/ffmpeg
ffmpeg version N-89948-ge3d946b3f4-static https://johnvansickle.com/ffmpeg/ Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 6.4.0 (Debian 6.4.0-11) 20171206
(snipped output to save space)

要全局安装它,我需要将二进制文件移动到shell的路径中。“PATH”是环境中的一个变量,它被设置为shell用来定位二进制文件的冒号分隔目录列表。这是我的系统路径。

$ echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/john/.local/bin:/home/john/bin

检查是否安装旧版本

$ whereis ffmpeg
ffmpeg: /usr/bin/ffmpeg

这列出了安装在/usr/bin中的较老版本的ffmpeg。我可以卸载旧版本,或者将新的ffmpeg二进制文件放在/usr/bin之前搜索的路径中。应该是/usr/local/bin

将二进制文件ffmpeg和ffprobe移动到shell的路径中(sudo自行搜索安装,也可以直接mv,但比较麻烦)

$ sudo mv ffmpeg-git-20180203-amd64-static/ffmpeg ffmpeg-git-20180203-amd64-static/ffprobe /usr/local/bin/

$ whereis ffmpeg
ffmpeg: /usr/local/bin/ffmpeg

$ whereis ffprobe
ffprobe: /usr/local/bin/ffprobe

安装完成了

$ ffmpeg
ffmpeg version N-89948-ge3d946b3f4-static https://johnvansickle.com/ffmpeg/ Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 6.4.0 (Debian 6.4.0-11) 20171206
(snipped output to save space)

卸载(当然安装是用不到的)

$ sudo rm /usr/local/bin/ffmpeg /usr/local/bin/ffprobe

2.安装youtube-dl

$ pip install youtube-dl

3.推流

$ youtube-dl -f best $URL -o - | ffmpeg -re -i pipe:0 -c:v copy -c:a aac -f flv $RTMP

$RTMP为rtmp地址+直播码,需要加引号""

但是断开连接后推流会停止,在命令最后加 & 保持后台运行

备注:

1)使用youtube-dl下载视频的命令:youtube-dl -f best jNQXAC9IVRw

  这个命令使用 -f best 参数寻找最佳画质,jNQXAC9IVRw 作为视频的番号告诉 youtube-dl 你想要下载哪个视频。

2)使用streamlink 播放视频的命令:streamlink $URL best

  这个命令中 best 参数告诉了你想寻找最佳画质的资源, $URL 作为视频的播放地址告诉 streamlink 你想要播放哪个网页上的视频。如果你的电脑上安装了ffplay、ffmpeg等软件,还可以使用 --player=ffplay 指定你要使用哪个播放器播放,这里就用 ffplay 播放器。

3)使用ffmpeg推流的命令:cat example.mp4 | ffmpeg -re -i pipe:0 -c:v copy -c:a aac -f flv $RTMP

  这个命令将告诉 cat 程序从你想要播放的视频文件中读取数据,| 符号表示创建一个从 cat 程序到 ffmpeg 程序的数据管道,将视频源源不断地传输过去。之后的参数中,-i pipe:0 参数告诉 ffmpeg 要从数据管道中读取数据。

  -re 参数:表示告诉 ffmpeg 要按照视频正常播放的帧数来处理。

  -i 参数:表示告诉 ffmpeg 要从什么地方读取媒体流数据。这里,pipe:0 是从管道读取数据,pipe:1 是向管道写入数据。

  -c 参数:告诉 ffmpeg 编码方案。这里的 -c copy 表示完全拷贝,如果使用 -c:v copy -c:a aac ,则表示只拷贝视频,而音频使用 aac 格式重新编码。

  -f 参数:表示文件的输入输出位置。这里的 -f flv 表示输出为 flv 格式,$RTMP 表示推流到BILIBILI直播网站的地址,这里就替换成完整的直播间 RTMP 推流地址。

举例:

1)从 Youtube 转播到 BILIBILI:youtube-dl -f best $URL -o - | ffmpeg -re -i pipe:0 -c:v copy -c:a aac -f flv $RTMP

  这是一个简单的转播案例,使用UNIX的通信管道,简单地将 youtube-dl 下载的媒体流转发给 ffmpeg,此时 ffmpeg 只做简单的音频转码和格式处理就把媒体流发送到BILIBILI直播间的RTMP推流地址上。由于行为十分简单,计算机资源占用极少。

2)从 Ustream 转播到 BILIBILI:streamlink $URL best -O | ffmpeg -re -i pipe:0 -c copy -f flv $RTMP

  这是一个简单的转播案例,使用UNIX的通信管道,简单地将 streamlink 下载的媒体流转发给 ffmpeg,此时 ffmpeg 只做简单的镜像拷贝就把媒体流发送到BILIBILI直播间的RTMP推流地址上。同样由于行为十分简单,计算机资源占用极少。

3)从 Youtube 转播到任意RTMP服务器:youtube-dl -f best $URL -o - | ffmpeg -re -i pipe:0 -c:v copy -c:a aac -f flv $RTMP

  这个例子和前面两个别无二致,只需要替换 $RTMP 地址即可。


参考:

https://www.bilibili.com/read/cv2184009

https://www.johnvansickle.com/ffmpeg/faq/

https://www.johnvansickle.com/ffmpeg/

https://blog.csdn.net/heng4719/article/details/79105994

Linux直播推流的更多相关文章

  1. Android流媒体开发之路二:NDK开发Android端RTMP直播推流程序

    NDK开发Android端RTMP直播推流程序 经过一番折腾,成功把RTMP直播推流代码,通过NDK交叉编译的方式,移植到了Android下,从而实现了Android端采集摄像头和麦克缝数据,然后进行 ...

  2. Android NDK 直播推流与引流

    本篇介绍一下直播技术中推流与引流的简单实现. 1.流媒体服务器测试 首先利用快直播 app (其他支持 RTMP 推流与引流的 app 亦可)和 ffplay.exe 对流媒体服务器进行测试. 快直播 ...

  3. 直播推流端弱网优化策略 | 直播 SDK 性能优化实践

    弱网优化的场景 网络直播行业经过一年多的快速发展,衍生出了各种各样的玩法.最早的网络直播是主播坐在 PC 前,安装好专业的直播设备(如摄像头和麦克风),然后才能开始直播.后来随着手机性能的提升和直播技 ...

  4. 基于GPUImage的多滤镜rtmp直播推流

    之前做过开源videocore的推流改进:1)加入了美颜滤镜; 2) 加入了librtmp替换原来过于简单的rtmpclient: 后来听朋友说,在videocore上面进行opengl修改,加入新的 ...

  5. EasyPusher/EasyDarwin支持H.265 RTSP/RTP直播推流与分发播放

    前言描述 随着大屏时代和高清时代的到来,人们已经不再满足于VGA.CIF这种小分辨率了,取而代之的是720P.1080P.4K级的视频传输,虽然我们国家的基础带宽一直在上升,但普遍情况下,传输高清视频 ...

  6. 基于ffmpeg 直播推流和播放rtmp (IOS源码)

    ios直播推流每秒能达到30帧,比安卓要强,视频采用软编码的话手机会发烫,得采用码编码,播放视频采用opengl渲染. ffmpeg初始化代码如下: int init_Code(int width, ...

  7. 不用任何第三方,写一个RTMP直播推流器

    2016年是移动直播爆发年,不到半年的时间内无数移动直播App掀起了全民直播的热潮.然而个人觉得直播的门槛相对较高,从推流端到服务端器到播放端,无不需要专业的技术来支撑,仅仅推流端就有不少需要学习的知 ...

  8. day122:MoFang:OSSRS流媒体直播服务器&基于APICloud的acLive直播推流模块实现RTMP直播推流

    目录 1.docker安装OSSRS流媒体直播服务器 2.基于APICloud的acLive直播推流模块实现RTMP直播推流 3.直播流管理 1.docker安装OSSRS流媒体直播服务器 1.OSS ...

  9. 【教程】OBS直播推流教程(Windows & macOS)

    OBS Open Broadcaster Software | OBS (obsproject.com) Windows直播推流教程 Windows下OBS直播推流非常简单,本教程将会介绍,具体步骤如 ...

随机推荐

  1. v-for同时循环一个对象和数组

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  2. 安装_oracle11G_客户端_服务端_链接_oracle

    在开始之前呢,有一些注细节需要注意,oracle11G_客户端_和_服务端, 分为两种   一种是  开发者使用    一种是  BDA  自己使用(同时也需要根据自己 PC 的系统来做_win7_与 ...

  3. python摸爬滚打之day33----线程

    1.线程 能够独立运行的基本单位. 进程: 进程是资源分配的最小单位;  每一个进程中至少有一个线程. 线程: 线程是cpu调度的最小单位. 2.创建线程(类似于创建进程) import time f ...

  4. 已知两点经纬度(百度地图),用js求解两点之间的角度

    采用的网址:https://my.oschina.net/boogoogle/blog/740478

  5. 搭建docker私有仓库(https)

    1.修改openssl.cnf,支持IP地址方式,HTTPS访问在Redhat7或者Centos系统中,文件所在位置是/etc/pki/tls/openssl.cnf.在其中的[ v3_ca]部分,添 ...

  6. 在win7上跑基于任少卿作者代码修改的RPN+BF实验

    1.前言 之前在win10上成功的跑起来faster-rcnn的实验,并且跑了一下CaltechPedestrian的数据集,但是效果一直不理想,折腾了好久也没弄清楚到底原因出在哪里,直到读了Is F ...

  7. SQL Server 主库DML操作慢故障处理过程

    从某个时间开始,Cat监控到的数据发现,正式环境的Insert 表很慢,数据库用了AlwasON高可用(1个备库做了实时同步),特别是每天早上9:00--11:00,做活动的时候,下单的insert需 ...

  8. 使用微软自带 SharpZipLib 进行多文件 压缩

    /// <summary> /// 指定路径打包下载 /// </summary> /// <param name="fileName">< ...

  9. python的库小全

    环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. v ...

  10. #WEB安全基础 : HTTP协议 | 0x12 MIME多用途邮件扩展以及多部分对象集合

    我们是怎么让邮件里又有图片又有文字的? 文字和图片是两个不同的类型,而邮件又是一个类型. C语言的结构体允许用户定义一个含有多类型的自定义类型 像这样,看不懂没关系,你只要知道邮件里有多个类型就可以了 ...