我们如何使用ffmpeg将实时rtmp流转码为实时hls流?

Kir*_*ran 35 streaming ffmpeg

我正在尝试将实时rtmp流转换为hls流实时.

读完后我有点想法

http://sonnati.wordpress.com/2011/08/30/ffmpeg-%E2%80%93-the-swiss-army-knife-of-internet-streaming-%E2%80%93-part-iv/

我能够将实时rtmp流转换为hls但不能在运行时转换.当我运行命令并测试任何hsl文件(.m3u8和.ts)时,我无法看到,但是当我中断命令并检查那里时,我根据需要获取了hls文件.

我在谷歌搜索解决方案,但无法得到正确的答案.

有谁能够帮我?

提前致谢...

use*_*376 70

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

我遵循user1390208的方法,所以我只使用FFMPEG来生成rtmp流,然后我的服务器接收它以提供HLS.而不是Unreal/Wowza/Adob​​e,我使用免费服务器nginx和rtmp模块,这很容易设置.这就是我简单的做法:Any input file or stream -> ffmpeg -> rtmp -> nginx server -> HLS -> Client或更详细:

输入视频文件或流(http,rtmp,等等) - > ffmpeg将实时代码转换为x.264 + aac,输出到rtmp - > nginx获取rtmp并向用户(客户端)提供HLS.因此,在客户端,您可以使用VLC或其他任何东西,并连接到由nginx提供的.m3u8文件.

  • 我按照nginx的这个设置指南.
  • 是我的nginx配置文件.
  • 这是我使用ffmpeg将输入文件转码为rtmp的方式:

    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;
    
    Run Code Online (Sandbox Code Playgroud)

    (.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;
    
    Run Code Online (Sandbox Code Playgroud)

    或者如果您的rtmp流已经是h.264/aac编码,您可以尝试使用copyffmpeg中的选项将内容直接流式传输到nginx.

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

  • 我的rtmp服务器有一个名为"hls"的"应用程序".这是描述nginx监听ffmpeg的rtmp流的部分,这就是为什么ffmpeg流到rtmp://localhost:12345/hls/mystream;
  • 我的http服务器有location /hls.这意味着在VLC中我可以连接http://myServer:80/hls/mystream.m3u8以访问HLS流.

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


Sum*_*and 21

尝试使用此RTMP到HLS命令行设置:

ffmpeg -v verbose -i rtmp://<host>:<port>/<stream> -c:v libx264 -c:a aac -ac 1 -strict -2 -crf 18 -profile:v baseline -maxrate 400k -bufsize 1835k -pix_fmt yuv420p -flags -global_header -hls_time 10 -hls_list_size 6 -hls_wrap 10 -start_number 1 <pathToFolderYouWantTo>/<streamName>.m3u8
Run Code Online (Sandbox Code Playgroud)

HLS提要可能会有一些延迟.但是,它会起作用.