当前位置: 首页 > 知识库问答 >
问题:

如何使用FFMPEG将实时rtmp流转换为实时hls流?

谭煜
2023-03-14

我试图转换一个实时的rtmp流到hls流。

我看了之后有了一些想法

提前谢谢...

共有1个答案

云项禹
2023-03-14

这是使用任何输入文件或流的HLS流的简短指南:

我遵循User1390208的方法,所以我使用FFMPEG只产生rtmp流,然后我的服务器接收该流以提供HLS。我没有使用Unreal/wowza/adobe,而是使用带有rtmp模块的免费服务器nginx,它很容易设置。简而言之,我是这样做的:任何输入文件或流->ffmpeg->rtmp->nginx server->HLS->client或更详细:

输入视频文件或流(http、rtmp等等)-->ffmpeg实时转码到X.264+aac,输出到RTMP-->nginx获取rtmp并向用户(客户机)提供HLS。因此,在客户端,您可以使用VLC或其他任何方式,并连接到Nginx提供的。m3u8文件。

ffmpeg -re -i mydirectory/myfile.mkv -c:v libx264 -b:v 5M -pix_fmt yuv420p -c:a:0 libfdk_aac -b:a:0 480k -f flv rtmp://localhost:12345/hls/mystream;

(.mkv是1080p,5.1声音,根据您的输入,您应该使用较低的比特率!)

您从哪里获得rtmp流?

>

  • 一个文件?然后你就可以用我的方法了。
  • 任何带有流y的服务器X?然后必须将ffmpeg命令更改为:

    ffmpeg -re -i rtmp://theServerX/yourStreamY -c:v libx264 -b:v 5M -pix_fmt yuv420p -c:a:0 libfdk_aac -b:a:0 480k -f flv rtmp://localhost:12345/hls/mystream;
    

    或者,如果您的rtmp流已经是H.264/AAC编码的,您可以尝试使用ffmpeg中的copy选项将内容直接传输到Nginx。

    正如您在我的nginx配置文件中看到的:

    • 我的rtmp服务器有一个名为“hls”的“应用程序”。这一部分描述了nginx在哪里侦听ffmpeg的rtmp流,这就是为什么ffmpeg流到rtmp://localhost:12345/hls/mystream;
    • 我的http服务器具有位置/hls。这意味着在VLC中,我可以连接到http://myserver:80/HLS/mystream.m3u8来访问HLS流。

    一切都清楚了吗?流媒体快乐!

  •  类似资料:
    • 我正在构建一个web应用程序,涉及服务各种视频内容。Web友好的音频和视频编解码器处理没有任何问题,但我在设计与HTML5视频播放器如mkv容器或H265不兼容的视频文件交付时遇到了麻烦。 我的技术可行吗?因为只有在关键帧之后才可能进行分段,所以预置分段持续时间会有什么问题吗?ffmpeg是否可以绕过这个问题? 我对视频处理和生成的知识充其量只是微不足道。我将非常感谢一些指点。

    • 在这一点上,我的解决方案是工作的,但只能作为RTMP,我可以使用URL完美地观看我的流: 但问题是我的LG智能电视使用WebOS不支持RTMP,我真的很想在那里播放我的流。我现在能看到的唯一解决方案是使用HLS。使用HLS也很好,但我需要在打开电视中的HLS流之前执行我的ffmpeg命令,否则它将不会创建在电视上显示流所需的文件。

    • 我希望将fMP4片段转换为TS片段(用于HLS),因为片段是在iOS设备上使用FFmpeg编写的。 我试图在iOS上实现实时上传,同时在本地保持无缝的高清副本。 1)启动由AAC编码器编写的音频帧,产生间隙。 2)由于视频帧长33.33ms,音频帧长0.022ms,所以它们可能不在文件末尾排队。 3)在Mac OS上缺乏帧精确编码,但在iOS上没有详细信息 但是,我对FFmpeg C API还不够

    • 我正尝试在iOS应用程序中使用ffmpeg将本地。mp4视频转换为HLS。我已经使用pods集成了ffmpeg包装器,并生成了所有分段的。ts文件和m3u8文件,但是一些。ts文件段没有在。m3u8播放列表文件中列出,如下所示。它总是列出最后5个视频片段。 我使用以下代码生成HLS。 还有其他方法可以做到这一点吗?

    • 我想把一个HLS流和转码到RTMP,并与nginx RTMP模块联播。 但是它不起作用(我把它放在RTMP模块的应用程序部分)。 当我试图在VLC中查看我的RTMP流时,它没有加载。我已经尝试了ffmpeg指令的几个变体,没有一个奏效。有什么建议吗?如果您需要查看更多我的配置文件,我可以提供,但这台服务器在以前通过Teradek编码器发送视频时一直工作得很好。这条新皱纹不起作用了。 编辑:只是有个

    • 目标:使用OBS接收来自PC的流,使用Nginx RTMP模块接收流,并输出给观众,以便他们可以在PC和移动上观看实时流。为此,Nginx必须用HLS输出实时流。 我的合作伙伴已经设置了以下Nginx文件,但没有任何结果(它是在stackoverflow-->answer的回答之后完成的) 这是OBS流配置的捕获: PC可以很好地查看流,但移动不能。 感谢任何人的任何投入。