linux - 使用 crtmpserver 重新传输 MPEG2 TS PAL 流

标签 linux ffmpeg video-streaming

我想构建某种流包装器:​​

我拥有一台带网络功能的旧 Dreambox PAL Sat 接收器。我想将该流转码为较低的结果并重新流式传输。

我的目标是建立一个简单的网站,通过 rtmp 嵌入该流。

我认为 crtmpserver 应该是正确的软件。现在我有一个正在运行的网站,可以通过 jwplayer/crtmpserver 播放本地文件。

我正在寻找解决方案:

httpUrl -> ffmpeg -> crtmpserver

这可能吗?我可以将 ffmpeg 的输出重定向到归档管道,并且 crtmpserver 可以抓取它吗?还是使用 UDP?

任何提示表示赞赏!谢谢!!

最佳答案

这很简单:

  1. 启动服务器(在控制台模式下进行调试) 您应该看到类似这样的内容:

    |tcp| 0.0.0.0| 9999|入站TCPTs| flv播放|

基本上,这是 mpegts 流的 tcp 接受器

  1. 使用 ffmpeg 创建流:

    ffmpeg -i <源> <源相关参数> <音频编解码参数> <视频编解码参数> -f mpegts "tcp://127.0.0.1:9999"

示例:

ffmpeg -i /tmp/aaa.flv -acodec copy -vcodec copy -vbsf h264_mp4toannexb -f mpegts "tcp://127.0.0.1:9999"
  1. 返回服务器并观察控制台。您应该看到类似这样的内容:

    从协议(protocol) ITS(13) 注册到应用程序 flvplayback 的名称为 ts_13_257_256 的流 INTS(6)

ts_13_257_256 是流名称。现在您可以使用 jwplayer 或类似的播放器并将其指向该流

如果你想使用UDP,你需要停止服务器并更改配置文件,而不是

protocol="inboundTcpTs"

你应该有

protocol="inboundUdpTs"

您甚至可以复制整个部分并更改端口号以同时拥有两者。 另外,您必须更改 ffmpeg,这样您就可以使用 udp://127.0.0.1:9999 而不是 tcp://127.0.0.1:9999

现在,如果您还想要一个流名称,而不是 ts_13_257_256(即 ts_protocolId_AudioPID_VideoPID),您可以以类似的方式使用 LiveFLV:

ffmpeg -i /tmp/aaa.flv -acodec copy -vcodec copy -vbsf h264_mp4toannexb -f flv -metadata streamName=myStreamName "tcp://127.0.0.1:6666"

服务器应该显示:

Stream INLFLV(1) with name `myStreamName` registered to application `flvplayback` from protocol ILFL(3)

好了,现在您有了一个“计算出的”流名称,即 myStreamName

最后一个观察。请在 crtmpserver 的邮件列表上询问此类问题。你会被更好地听到。 您可以在这里找到资源: http://www.rtmpd.com/resources/

下查找 Google 群组

干杯, 安德烈

关于linux - 使用 crtmpserver 重新传输 MPEG2 TS PAL 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7628060/

相关文章:

javascript - window.location.href 导航出我的网站

Flutter - 如何使用 webview_flutter 包播放 Google Drive 视频预览

ruby-on-rails-3 - 使用 ffmpeg 转换媒体类型

javascript - FFmpeg.js 从 MP4 文件中提取图像 (jpeg/png)

c++ - ffmpeg命令行的c/c++程序

c - LD_PRELOAD-ed 共享对象捕获 read(),但不捕获 open()。为什么?

linux - 从三列文件中删除重复记录

c++ - Linux函数以一定的间隔调用

regex - linux中目录的半复杂重组

c# - 将缩略图设置为视频文件