ffmpeg:添加具有正确编解码器类型标记的流非混合流

问题描述

在常用的情况下,我认为 ffmpeg 要求输入采用指定的多路复用器格式,该格式包含一个或多个数据流,这些数据流可以使用与该格式关联的多路分配器支持的编解码器进行解码。我有一个数据流(不是音频或视频),它已经用编解码器编码但没有混合。 如何将这个流放入分配了正确编解码器类型的 ffmpeg 管道,以便复用器知道如何处理它?

我尝试通过 UDP 传输数据并指定 data 分路器。通过某些组合,我可以它正在流式传输,我永远无法让播放器连接,这可能是因为 mpegts输出为空或无效。命令行:

ffmpeg -v verbose ^
-f flv -listen 1 -i rtmp://127.0.0.1:1101 ^
-f data -i udp://127.0.0.1:1300 ^
    -map 0:v -vcodec mpeg2video -map 1:d -f mpegts -mpegts_m2ts_mode 1  udp://localhost:1200

结果(部分):

Input #0,flv,from 'rtmp://127.0.0.1:1101':
  Metadata:
    encoder         : Lavf58.29.100
  Duration: 00:00:00.00,start: 0.000000,bitrate: N/A
    Stream #0:0: Video: h264 (Constrained Baseline),1 reference frame,yuv420p(progressive,left),5760x1080 (5760x1088),30 fps,30 tbr,1k tbn,60 tbc
    Stream #0:1: Audio: mp3,48000 Hz,stereo,fltp,128 kb/s
Input #1,data,from 'udp://127.0.0.1:1300':
  Duration: N/A,bitrate: N/A
    Stream #1:0: Data: none
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> mpeg2video (native))
  Stream #1:0 -> #0:1 (copy)
Press [q] to stop,[?] for help
[h264 @ 00000180d48ae700] Reinit context to 5760x1088,pix_fmt: yuv420p
[graph 0 input from stream 0:0 @ 00000180d489dcc0] w:5760 h:1080 pixfmt:yuv420p tb:1/1000 fr:30/1 sar:0/1
[mpegts @ 00000180d5f64040] Cannot automatically assign PID for stream 1
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
Error initializing output stream 0:0 --
[AVIOContext @ 00000180d48b83c0] Statistics: 0 seeks,0 writeouts
[AVIOContext @ 00000180d4882080] Statistics: 185593 bytes read,0 seeks
[AVIOContext @ 00000180d5f469c0] Statistics: 204 bytes read,0 seeks
Conversion Failed!

编解码器类型名称klv,其标签KLVA。它仅受 mpegtsmxf (de)muxers 支持。我认为必须有一种方法可以在没有有效的 mpegtsmxf 流的情况下进入管道,否则我们会遇到一种悖论。

我尝试在输入上指定编解码器,但验证失败,我猜是因为 data 分路器不支持它。

不知何故可以从元素流(mp4h264 文件)中混合 aac 文件,但我想代码中必须有一些特殊情况来强制基于文件扩展名。

我真的很想从命令行使用公共构建来做到这一点,但如果这绝对不可能,我也欢迎一些关于可以通过 C++ 代码实现的建议。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...