首页 > 其他分享 >FFmpeg开发笔记(十五)详解MediaMTX的推拉流

FFmpeg开发笔记(十五)详解MediaMTX的推拉流

时间:2024-04-20 11:56:48浏览次数:27  
标签:127.0 8888 FFmpeg stream 0.1 推拉 播放 MediaMTX

​MediaMTX是个开源的轻量级流媒体服务器,它的安装过程参见《FFmpeg开发实战:从零基础到短视频上线》一书的“10.2.2  FFmpeg向网络推流”。MediaMTX下载后的压缩包包括可执行程序mediamtx.exe和配置文件mediamtx.yml,看起来非常简约,但它提供的流媒体服务一点也没缩水。双击mediamtx.exe,MediaMTX弹出一个命令行窗口,窗口内部的日志信息如下:

2023/12/10 14:18:25 INF MediaMTX v1.3.0
2023/12/10 14:18:25 INF configuration loaded from E:\Program Files (x86)\mediamtx\mediamtx.yml
2023/12/10 14:18:25 INF [RTSP] listener opened on :8554 (TCP), :8000 (UDP/RTP), :8001 (UDP/RTCP)
2023/12/10 14:18:25 INF [RTMP] listener opened on :1935
2023/12/10 14:18:25 INF [HLS] listener opened on :8888
2023/12/10 14:18:25 INF [WebRTC] listener opened on :8889 (HTTP), :8189 (ICE/UDP)
2023/12/10 14:18:25 INF [SRT] listener opened on :8890 (UDP)

由日志可见,MediaMTX开启了下列五项流媒体服务:
1、侦听8554端口的RTSP服务,对应的流媒体播放地址是rtsp://127.0.0.1:8554/stream;
2、侦听1935端口的RTMP服务,对应的流媒体播放地址是rtmp://127.0.0.1:1935/stream;
3、侦听8888端口的HLS服务,对应的流媒体播放地址有两个,其中http://127.0.0.1:8888/stream可以直接通过浏览器播放(比如Chrome),另一个http://127.0.0.1:8888/stream/index.m3u8需要用播放器打开。
4、侦听8889端口的WebRTC服务;
5、侦听8890端口的SRT服务;
接下来验证MediaMTX的实际推拉流情况。打开MSYS窗口,进入《FFmpeg开发实战:从零基础到短视频上线》一书第十章的源码目录,执行下面的编译命令。

gcc pushvideo.c -o pushvideo -I/usr/local/ffmpeg/include -L/usr/local/ffmpeg/lib -lavformat -lavdevice -lavfilter -lavcodec -lavutil -lswscale -lswresample -lpostproc -lm

编译完成后执行以下命令启动测试程序,期望把2018.mp4推给默认的推流地址rtsp://127.0.0.1:8554/stream。

./pushvideo ../2018.mp4

打开另一个MSYS窗口,同样进入《FFmpeg开发实战:从零基础到短视频上线》一书第十章的源码目录,执行下面的编译命令。

gcc pullvideo.c -o pullvideo -I/usr/local/ffmpeg/include -L/usr/local/ffmpeg/lib -I/usr/local/sdl2/include -L/usr/local/sdl2/lib -lsdl2 -lavformat -lavdevice -lavfilter -lavcodec -lavutil -lswscale -lswresample -lpostproc -lm

编译完成后执行以下命令启动测试程序,期望从http://127.0.0.1:8888/stream/index.m3u8拉取视频流并弹窗播放。

./pullvideo http://127.0.0.1:8888/stream/index.m3u8

然后果真弹出一个SDL窗口,正在播放从HLS服务拉取的视频画面,说明MediaMTX正确实现了HLS协议的流媒体转发功能。
不过对于上面的HLS协议,具体的播放情况比较复杂,比如http://127.0.0.1:8888/stream只能通过Chrome播放,不能通过FireFox或者Edge播放。而http://127.0.0.1:8888/stream/index.m3u8这个地址无法使用Windows Media Player打开,即使通过VLC播放也不显示画面。推测是因为pushvideo只推送视频流不推送音频流,而VLC的音视频同步机制采用音频基准,由于缺失音频流使得视频流无处校准导致不能正常显示画面。

标签:127.0,8888,FFmpeg,stream,0.1,推拉,播放,MediaMTX
From: https://www.cnblogs.com/aqi00/p/18105753

相关文章

  • 使用ffmpeg 插入片头片尾(指定时长)
    功能需求:1、插入的片头可以时图片或视频。图片格式暂时未jpg视频格式为mp4。可能存在的问题:1)、图片需要先转换成ts文件:增加视频和音频。2)、mp4文件可能无声音。3)、片头片尾的参数与录制视频的参数不匹配:导致连接过程可能会黑屏。  首先参数统一1、如何加快编码h264......
  • 使用 ffmpeg 为视频文件添加封面
    全程使用CHATGPT4提供帮助通常而言,电脑上的资源管理器会使用视频的第一帧来作为缩略图,如果视频文件中有封面存在,则会使用封面作为文件缩略图(Windows自带的资源管理器是这样,具体要看资源管理器的实现)与GPT4沟通后,发现可以使用ffmpeg为视频添加封面。原理是为文件添加一......
  • FFmpeg开发笔记(十四)FFmpeg音频重采样的缓存
    ​FFmpeg在很多地方都运用了缓存机制,比如《FFmpeg开发实战:从零基础到短视频上线》一书的“3.3.2 对视频流重新编码”介绍了编解码的数据缓存,不单是视频编码过程和视频解码过程有缓存,甚至连音频重采样都用到了缓存。也就是说,重采样函数swr_convert一次只会输出指定长度的音频数......
  • simple_ffmpeg_decoder(ffmpeg的解码器)
    代码#include<stdio.h>#define__STDC_CONSTANT_MACROS//因为ffmpeg是C语言编写的所以要继承C语言的语法格式extern"C"{#include"libavcodec/avcodec.h"#include"libavformat/avformat.h"#include"libswscale/swscale.h"};intmain(i......
  • FFmpeg开发笔记(十三)Windows环境给FFmpeg集成libopus和libvpx
    ​MP4是最常见的视频封装格式,在《FFmpeg开发实战:从零基础到短视频上线》一书的“1.2.3 自行编译与安装FFmpeg”介绍了如何给FFmpeg集成x264和x265两个库,从而支持H.264和H.265两种标准的编解码。视频的封装格式除了悠久的MP4和ASF之外,还有较新的WebM格式,该格式的音频编码主要采......
  • 视频处理的利器,ffmpeg-python库详解与应用示例
    左手编程,右手年华。大家好,我是一点,关注我,带你走入编程的世界。公众号:一点sir,关注领取python编程资料在数字媒体的时代,视频处理成为了一项重要的技能。无论是剪辑、转码、还是添加特效,都需要强大的工具来处理视频素材。Python作为一门功能强大的编程语言,在视频处理领域也有着广......
  • centos7中ffmpeg的安装方法
    Linux系统安装ffmpeg&升级ffmpeg一、介绍多媒体视频处理工具FFmpeg有非常强大的功能,包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。由于最近要处理音视频格式转换问题,因此需要安装、升级ffmpeg,下面来记录一下踩坑过程。 二、安装ffmpeg1、下载并解压ffmpeg......
  • FFmpeg常用功能
    1.转码视频格式:ffmpeg-iinput.mp4output.avi上述命令将输入的MP4视频文件转换为AVI格式。2.压缩视频文件:ffmpeg-iinput.mp4-vcodeclibx264-crf23output.mp4 该命令使用libx264视频编解码器对输入的MP4文件进行压缩,并将压缩后的视频保存为MP4格式。CRF值(Cons......
  • 基于 FFmpeg 的自定义 Media Extractor(2):自定义 Extractor 的实现方法
    文章目录前言C/NDKAPI简介C++API简介实现自定义Extractor编译自定义Extractor参考资料前言在上一篇文章中,简要介绍了Extractor组件选择及创建过程。本文将继续基于Android11探索自定义Extractor的实现,及其接入到Android多媒体框架中的方法。C/NDKA......
  • ffmpeg对视频进行裁减crop
    ffmpeg-i input.mp4 -r 50 -vf crop=800:900:150:200 output.mp4input.mp4:你需要裁减的视频50:裁减之后的视频的帧率crop=800:900:150:200:150:200表示的是从视频的左上角(150,200)这个位置开始对视频进行裁减。其中800表示裁减后的视频的w是800,900表示h。out......