FFmpeg拉流
-
直播拉流
ffplay rtmp://server/live/streamName
-
这个命令使用
ffplay
工具来播放一个 RTMP 流。RTMP 是一种实时消息传输协议,通常用于在网络上传输音频、视频和数据。在这个命令中,rtmp://server/live/streamName
是一个 RTMP 流的地址,其中server
是 RTMP 服务器的地址,live
是应用程序名称,streamName
是流的名称。通过这个命令,你可以使用
ffplay
播放名为streamName
的 RTMP 流,前提是你有一个 RTMP 服务器,并且正在向该服务器推送视频或音频数据流。
ffmpeg -i rtmp://server/live/streamName -c copy dump.flv
-
这个命令使用
ffmpeg
工具从指定的 RTMP 流中提取数据,并将其保存为 FLV 格式的文件dump.flv
。参数-i rtmp://server/live/streamName
指定了输入的 RTMP 流地址为rtmp://server/live/streamName
,-c copy
表示直接复制输入的音视频流而不进行重新编码,dump.flv
是输出文件的名称。通过这个命令,你可以从指定的 RTMP 流中提取音视频数据,并保存为 FLV 格式的文件。
-
对于不是rtmp的协议
-c copy
要谨慎使用
ffmpeg -i rtmp://server/live/streamName -c copy dump.ts ffmpeg -i rtmp://server/live/streamName dump.flv ffmpeg -i rtmp://server/live/streamName -acodec aac -vcodec libx264 dump.flv
-
这些命令用于处理从 RTMP 流中接收到的音视频数据:
ffmpeg -i rtmp://server/live/streamName -c copy dump.ts
:这个命令将从指定的 RTMP 流中提取音视频数据,并将其保存为 MPEG-TS 格式的文件dump.ts
。参数-c copy
表示直接复制输入的音视频流而不进行重新编码。ffmpeg -i rtmp://server/live/streamName dump.flv
:这个命令将从指定的 RTMP 流中提取音视频数据,并将其保存为 FLV 格式的文件dump.flv
。ffmpeg -i rtmp://server/live/streamName -acodec aac -vcodec libx264 dump.flv
:这个命令将从指定的 RTMP 流中提取音视频数据,并使用 AAC 编码音频、使用 libx264 编码视频,并将其保存为 FLV 格式的文件dump.flv
。
通过这些命令,可以根据需求提取、保存和重新编码从指定的 RTMP 流中接收到的音视频数据。
-
-
示例:
-
以B站直播为例,进入直播间打开开发者工具,打开
Network->Doc
找到.m3u8
地址 -
这里可以获取到信息:
host
为:https:\u002F\u002Fd1–cn-gotcha104.bilivideo.combase_url
:\u002Flive-bvc\u002F461891\u002Flive_492393_8124751_2500.m3u8?
-
将
host
和base_url
正确修改后进行合并为:https://d1--cn-gotcha204.bilivideo.com/live-bvc/431518/live_492393_8124751_2500/index.m3u8
-
测试:
ffplay https://d1--cn-gotcha204.bilivideo.com/live-bvc/431518/live_492393_8124751_2500/index.m3u8
- 直接播放
ffmpeg -i https://d1--cn-gotcha204.bilivideo.com/live-bvc/431518/live_492393_8124751_2500/index.m3u8 -c bilibili_record.ts
- 拉取直播流并指定输出文件名
- 通过输入一个HLS(HTTP Live Streaming)的.m3u8播放列表链接,将其中的视频流下载并保存为本地的MPEG-TS格式文件。
-i https://d1--cn-gotcha204.bilivideo.com/live-bvc/431518/live_492393_8124751_2500/index.m3u8
:指定输入的HLS播放列表链接。-c copy
:表示使用复制方式进行编码,即直接复制输入流的内容而不进行重新编码。这样可以避免对视频进行额外的处理,保持原始质量。bilibili_record.ts
:指定输出的文件名,这里是将HLS流保存为本地的MPEG-TS格式文件,文件名为bilibili_record.ts。
- 通过输入一个HLS(HTTP Live Streaming)的.m3u8播放列表链接,将其中的视频流下载并保存为本地的MPEG-TS格式文件。
-
FFmpeg推流
-
直播推流
ffmpeg -re -i out.mp4 -c copy flv rtmp://server/live/streamName
-re
:表示将输入文件按照时间戳和原始的帧率进行播放,即以实时的方式处理输入文件,适用于直播场景。-i out.mp4
:指定输入文件为out.mp4
,即本地的视频文件。-c copy
:表示使用复制方式进行编码,即直接复制输入流的内容而不进行重新编码。这样可以避免对视频进行额外的处理,保持原始质量。flv
:指定输出格式为 FLV 格式。rtmp://server/live/streamName
:指定 RTMP 服务器地址和推流路径,即要将视频推送到的位置。
这个命令将本地的视频文件推送到指定的 RTMP 服务器上,以 FLV 格式进行传输。
-
参考: