问题标签 [muxer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - Android 编码器复用器:原始 h264 到 mp4 容器
我创建了一个 h264 原始视频文件,并且能够在 Android 4.3 及更高版本上使用 Android MediaMuxer 对它进行多路复用。现在我需要支持 Android 4.1 和 4.2 版本。我找到了Jcodec。并且有一个这样做的例子:
https://github.com/jcodec/jcodec/blob/master/samples/main/java/org/jcodec/samples/mux/AVCMP4Mux.java
但我在第 70 行收到 java.nio.ReadOnlyBufferException 异常:
H264Utils.encodeMOVPacket(数据);
我猜这段代码不适用于Android?我该如何解决。熟悉Jcodec的人可以帮忙吗?
android - 如何提取FFMpeg的Muxer部分
我已经基于高通的示例构建了一个编码器,它可以捕获视频并将其压缩为 h264 文件。我使用的是安卓 4.2.2。现在我想把这个文件混合成 mp4(只有视频,没有音频)。
我听说 FFMpeg 可以完成这项工作。但是在阅读了示例之后,我发现复用器使用的是 FFMpeg 的编码器。我不知道如何在另一个编码器上使用复用器部分。
谁能给我一个提示?谢谢!
gstreamer - 如何从 rtspsrc 解复用音频和视频,然后使用 matroska mux 保存到文件?
我一直在开发一个应用程序,我使用 rtspsrc 将音频和视频从一个网络摄像机收集到另一个网络摄像机。但是,我无法观看来自相机的流,因此无法验证流是否按预期工作。为了验证流是否正确,我想将其记录在 SD 卡上,然后在计算机上播放文件。问题是我希望相机尽可能多地进行解析、解码和卸载,因为这是应用程序的目的。
因此,我必须通过解复用器分离音频和视频流,并进行解析、解码等,然后将它们复用回 matroska 文件。
视频解码器已被省略,因为该相机尚未完成。
解复用到实时播放接收器(作品)
多个 rtspsrc 到 matroska(works)
单个 rtspsrc 到 matroska(失败)
最后一个示例失败并显示错误消息
我是否误解了 matroska mux 的用法,为什么上面的 2 个示例有效,但最后一个无效?
ios - 将来自 VTCompressionSession 的压缩帧与音频数据混合到 MPEG2-TS 容器中以进行网络流式传输
我正在从事一个项目,该项目涉及从 iOS8 中的 VTCompressionSession 中获取 H.264 编码帧,将它们与来自麦克风的实时 AAC 或 PCM 音频混合到可播放的 MPEG2-TS 中,并通过套接字以最小的延迟实时流式传输(即:(几乎)没有缓冲)。
在观看了 iOS8 中新 VideoToolbox 的演示文稿并进行了一些研究之后,我想可以肯定地假设:
你从 VTCompressionSession 得到的编码帧不是附件 B 格式,所以我需要以某种方式转换它们(到目前为止我看到的所有解释都太模糊了,所以我不太确定你是如何做到这一点的(即:将“3 或 4 字节标题替换为长度标题”))。
您从 VTCompressionSession 获得的编码帧实际上是一个基本流。因此,首先我需要将它们转换为 Packetized Elementary Stream,然后才能对其进行复用。
我还需要来自麦克风数据的 AAC 或 PCM 基本流(我认为 PCM 会更容易,因为不涉及编码)。我也不知道该怎么做。
为了复用打包的基本流,我还需要一些像 libmpegts 这样的库。或者可能是 ffmpeg(通过使用 libavcodec 和 libavformat 库)。
我对此很陌生。我可以就实现这一目标的正确方法获得一些建议吗?
有没有更简单的方法来使用 Apple API(如 AVFoundation)来实现这一点?
有没有类似的项目可以作为参考?
提前致谢!
android - 在编码器工作时为新视频文件重新创建复用器
我使用 BigFlake 的 CameraToMpegTest,但我对其进行了修改,以便在编码器工作时多次启用和停止多路复用器。当没有视频录制时,我仍然使用编码器从纹理中获取帧以进行其他处理。
对于第一次启动/停止它工作正常,但第二次启动/停止存在问题。我得到异常然后关闭应用程序:“stop() 在无效状态 3 下被调用”,“...引起:java.lang.IllegalStateException:无法停止多路复用器...”。第二个视频文件也没有打开,但它不是空的。
是否有可能在连续运行编码器的同时重新启动复用器?我究竟做错了什么?
更新:我在关键帧中发现了这个问题。当我设置 format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 0) 那么一切都很好。那么,当 muxer 再次开始录制时,如何请求关键帧?
混合器类:
audio - FFMPEG - RTMP 到 HLS 没有音频输出
我目前正在为我们的 livecam 应用程序开发一个动态 HLS 分段器。因此,我捕获外部 RTMP 流并使用 ffmpeg 将其转换为段。
以下命令有效:
但是使用这个命令,我在直播和 HLS 输出之间确实有很大的延迟(大约 1-2 分钟!)。
所以我尝试了另一个命令,导致延迟为 20-30 秒!我唯一的问题是,音频流无法识别,也没有放入 HLS 文件(意味着我只有视频,但根本没有音频):
我想, -c:a aac 标志也应该完成混合音频的工作。
您对第二个命令出了什么问题有什么建议吗?我当然也必须对音频流进行分段!
提前致谢
更新:
FFMPEG 命令的一些输出:
我启动了命令(2),并获得了音频输出,但似乎并非每次都有效。
工作命令 2 的输出,音频工作: http: //pastebin.com/bhxfNQBg
工作命令 2 的输出,音频不工作(没有改变): http: //pastebin.com/engEuSdn
对我来说奇怪的是,这条线:
仅当 hls 端的音频不工作时才会发生这种情况。
任何帮助将不胜感激
更新 2:
在流已经发布后启动 ffmpeg 命令时似乎出现问题。
如果我按照这些步骤操作,一切正常:
1. 启动 Stream(与 AMS 的 nc 连接已建立)
2. 启动 FFMPEG 命令(它将空闲直到流发布)
3. 开始发布
但是如果我这样做(我们需要),则不会出现音频:
1. 启动 Stream
2. 用户加入,开始发布
3. 触发 ffmpeg 命令
video - FFMpeg 将 h264 复用到 mp4 结果文件未运行
我正在使用最新的 FFMPEG 3.0 编写代码以将 h264 文件复用到 mp4 中。Muxing 正在工作,但生成的 mp4 文件没有显示视频,只有当我播放生成的 mp4 文件时正在运行。请尝试帮助解决这个问题。请告诉我我错过了什么。这是我的代码:
c - 使用 C/C++ 中的 ffmpeg 库从 CCTV (HW) 编码器将 H.264 多路复用到 MP4,如何获取 AVCodecContext::extradata
我正在尝试将通过闭路电视摄像机的 SDK API 接收到的数据包中的视频复用到 mp4 文件。来自 CCTV 的流似乎只包含 h264 I 和 P 帧的数据包(没有 B 帧)。
问题是,当我将 AVCodecContext::extradata 留空时,该文件无法在 Daum PotPlayer 中播放,但是,我可以在 VLC 中播放该文件。如果我提供额外的数据(可能不正确 - 我只是从从硬件编码器接收到的数据包中复制前 50 个字节),则该文件可以在 PotPlayer 中播放,但不能在 VLC 中播放。
我不知道,如何正确准备额外数据。
下面的代码显示了复用。
看来,来自相机的数据包(缓冲在 tmpRawFrameBuffer 向量中)包含一些标头,但我无法解析它们,我不明白标头的含义。
I 帧数据包的第一个字节看起来像下面的转储:
第一个 P 帧的第一个字节:
下一个 P 帧的第一个字节:
...
下一个 I 帧的开始:
有谁知道,如何正确填写额外数据?我只是复制了前 50 个字节,但似乎这是不正确的。
可能标头是 (AUD)(SPS)(PPS)(I-Slice)(PPS)(P-Slice)(PPS)(P-Slice) ... (AUD)(SPS)(PPS)(I-Slice )(https://stackoverflow.com/a/20686267/1699328),但是,我不知道如何为
我试图在这篇文章H.264 muxed to MP4 using libavformat not playing back中获得一些灵感,但我无法弄清楚 spsFrameLen、ppsFrameLen 和 spsFrame 的值是什么。
复用器的结果(mp4 文件的第一个和最后一个字节):
非常感谢您的任何建议。
ffmpeg - ffmpeg 错误:数据看起来不像 RTP 数据包,请确保使用 RTP 复用器
我正在尝试通过 ffserver 从 usbcam 和 mic throw ffmpeg 流式传输视频和音频我收到 2 个错误:
- ffmpeg 似乎正在运行,但显示“数据看起来不像 RTP 数据包,请确保使用 RTP 多路复用器” - 我只能连接到 ffserver静态文件
这是 server.conf 文件:
我的 ffmpeg cmd 是
它似乎工作但显示此错误:
“数据看起来不像 RTP 数据包,请确保使用 RTP 复用器”
当我流式传输静态文件时它可以工作但是当我尝试播放 usbcam 流时抛出 ffplay 和 vlc 没有任何效果
先感谢您,
android - MediaCodecMuxer 编码视频太慢
我正在使用 MediaCodec Muxer 对视频进行编码,但是这个过程太慢了。有时 60 秒的视频,编码过程需要 90 多秒。编码计划来自 ExtractDecodeEditEncodeMuxTest(BigFlake),我将此示例解释为 jni 层。我不知道是因为我的代码中使用反射调用java api导致视频编码非常慢还是GLDisplay和MediaCodec inputSurface之间的交换过程导致了这个问题?我使用 eglCreateWindowSurface 创建 GLSurface,我想知道是否可以使用 eglCreatePbufferSurface 创建可以加快编码过程的离屏表面?任何人都可以提供一些建议吗?谢谢!