问题标签 [libx264]
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.
video - 调整 FFmpeg H.264 解码器
我正在使用 FFmpegavcodec
解码实时视频——avcodec_decode_video2
确切地说是来自 libx264 的函数。如何减少每帧的解码时间?目前每帧需要 20 毫秒(帧大小约为1.5 KB
)。
c++ - 给定一个 x264 流和一个 ogg vorbis 流,我如何制作一个 mplayer/VLC 可以读取的混合流?
我很困惑,有点坚持这个问题。我在谷歌上只能找到转码软件的基本用法,与问题无关。
我正在制作一个游戏,我想包括原生捕获能力来流式传输视频。我很想将此流式传输到标准客户端,例如 VLC。它需要采用它可以识别的格式,并且需要多路复用才能使其正常工作。
因此,我的问题是,我知道如何将原始视频帧中的内容编码为 x264(另请参阅如何使用 x264 C API 将一系列图像编码为 H264?)。我知道如何将原始音频样本编码为 ogg/vorbis。现在,我如何将一个和一个放在一起用于 VLC?
c++ - 使用 libavformat 通过 RTP 流式传输 H.264
在过去的一周里,我一直在尝试通过 RTP 实现 H.264 流,使用 x264 作为编码器和 libavformat 来打包和发送流。问题是,据我所知,它工作不正常。
现在我只是编码随机数据(x264_picture_alloc)并从 libx264 中提取 NAL 帧。这很简单:
nal_queue
用于将帧安全地传递给 Streamer 类,然后将帧发送出去。现在它没有线程化,因为我只是在测试试图让它工作。在对单个帧进行编码之前,我已确保初始化编码器。
但我不相信 x264 是问题所在,因为我可以在它返回的 NAL 中看到帧数据。流式传输数据是使用 libavformat 完成的,它首先在 Streamer 类中初始化:
这就是事情似乎出错的地方。av_write_header
上面似乎什么也没做;我已经使用wireshark来验证这一点。作为参考,我Streamer streamer(&enc, "10.89.6.3", 49990, 800, 600, 30, 40000);
用来初始化 Streamer 实例,enc
作为对Encoder
以前用于处理 x264 的对象的引用。
现在,当我想流式传输 NAL 时,我使用它:
此时,我可以看到 RTP 数据出现在网络上,它看起来就像我一直在发送的帧,甚至包括来自 x264 的一点版权 blob。但是,我用过的任何播放器都无法理解这些数据。VLC 不再需要 SDP 描述,这显然不是必需的。
然后我尝试通过以下方式播放它gst-launch
:
gst-launch udpsrc port=49990 ! rtph264depay ! decodebin ! xvimagesink
这将等待 UDP 数据,但是当它收到时,我得到:
错误:元素/GstPipeline:pipeline0/GstRtpH264Depay:rtph264depay0:未协商 RTP 格式。附加调试信息:gstbasertpdepayload.c(372):gst_base_rtp_depayload_chain ():/GstPipeline:pipeline0/GstRtpH264Depay:rtph264depay0:输入缓冲区需要设置 RTP 上限。这通常通过设置上游源元素(通常是 udpsrc 或 appsrc)的 'caps' 属性来实现,或者通过在 depayloader 之前放置一个 capsfilter 元素并在其上设置 'caps' 属性来实现。另请参阅 http://cgit.freedesktop.org/gstreamer/gst-plugins-good/tree/gst/rtp/README
由于我没有使用 GStreamer 进行流式传输,因此我不太确定 RTP 上限意味着什么。但是,这让我想知道我是否没有通过 RTP 发送足够的信息来描述流。我对视频很陌生,我觉得这里缺少一些关键的东西。有什么提示吗?
flash - 将 ffmpeg 与 Flash Media Server 和 HDS 一起使用
我想使用 ffmpeg 对实时流进行编码并将其发布到 Flash Media Server。为了支持 iOS 设备,我还需要实现 HTTP Live Streaming。视频必须是 H.264 格式,音频应该是 AAC。我没有太多使用 ffmpeg 的经验,而且我很难让它发挥作用。这是我尝试过的命令(以及一些变体):
当我运行它时,它似乎连接到 FMS,但随后我收到很多关于丢帧的错误消息——我不确定是否有任何帧被成功编码。我的 CPU 使用率也很高。当我为单个流之一输入 *.m3u8 文件的 URL 时,我从 FMS 收到 404 错误(尽管可以访问主 livestream.m3u8 文件)。我也尝试过输出到文件而不是 FMS,但没有成功。我得到的只是一些非常混乱的声音,没有视频。
关于我应该使用哪些选项/命令来使其正常工作的任何建议?是否有人使用带有 FMS 的 ffmpeg 来处理带有 MP4 视频的 HTTP 动态流/HLS?我一直在努力让 HDS/HLS 工作一段时间,任何帮助将不胜感激!应该没什么区别,但我在 Amazon EC2 上使用 FMS 和他们的 AMI 映像。
谢谢!
dll - 没有 cygwin1.dll 的 Libx264?
我已经由 MinGW 和 Msys 构建了 libx264-125.dll。但是,libx254-125.dll 需要调用 cygwin1.dll 和 cyggcc_s-1.dll 才能运行。谁能告诉我如何构建静态 libx264-125.dll 感谢您的帮助!
ffmpeg - ffmpeg 语法已更改
就像这篇文章中谈到的那样:FFmpeg 无法识别预设,即使它确实存在 Ubuntu 12.04
我有帮助,deblockalpha已经从 ffmpeg 贬值了很长时间,我对所有这些编码业务都不好,但希望有人告诉我如何修复这个过时的语法,因为我收到了这个错误:
无法识别的选项“deblockalpha”无法为选项“deblockalpha”设置值“0”
请参阅下面的代码并提供建议?
谢谢
android - Android 上的 GStreamer x264enc 和 SIGSEGV
我正在尝试使用 GStreamer-java,它是 Android 上的 h.264 编码器 (x264enc)。
现在,我尝试对来自测试视频源的原始视频进行编码(将其is-live属性设置为TRUE),当数据开始流入 x264enc 元素时,我在 libx264.so 中获得 SIGSEGV 并且我的应用程序崩溃。看起来代码正在取消引用 NULL... 确切的错误位置在文件“gstreamer_ndk_bundle/x264/encoder/analyze.c”第 963 行中。就是这一行:
我的设备的 CPU 是 Cortex 8,它具有 NEON 功能...
我试图将所有h
结构字段打印到文件中,并且没有未初始化的字段。
来自 LogCat 的 Android 调试信息:这里
我的问题:
- 我怎么知道是什么在抛出 SIGSEGV,因为这行代码似乎没问题?
- 这是 ARM CPU 上 x264 编码器的已知错误或预期行为,还是我缺少一些编码器配置?
- 我注意到如果我将编码器的属性分析设置为0x3:0x113(我在网上找到的一些随机值)我没有得到 SIGSEGV,编码器似乎工作,但我在管道中得到错误:数据流错误。我可以将分析设置为有意义的值吗?
更新
我在 x264_mb_analysis_intra() 函数中运行之前以及在它中断的行之前对所有重要的“h”字段进行了 fprintf 编辑,猜测它可能会有所帮助: http://pastebin.com/sAfX239j
callback - 何时调用 `nalu_process` 有什么保证(如果有的话)?
特别是,可以在与其关联的x264_encoder_encode
每个nalu_process
回调返回之前调用 return 吗?#x264 中有人建议它依赖于设置;我在这里谈论的是“零延迟”预设。
如果上述问题的答案是肯定的,那么它在经验上有多普遍?
video-encoding - 带有 mbtree 选项的 libx264 2 pass 编码,第一次通过失败
我正在开发一个使用 libx264 的应用程序。在进行 2 遍编码时,如果启用了 mbtree 选项,则第 1 遍似乎不会将任何内容放入 stats 文件中:
当我为第二遍执行 x264_encoder_open() 时,我收到失败消息:
所以它似乎在第一次通过时失败了。如果我关闭 mbtree,2pass 工作正常。只要关闭mbtree,我就可以使用预设或调整参数运行它。什么参数(见上面的列表)可能使 mbtree 在第一次通过时失败?
libavcodec - sws_scale 的替代方案
我正在使用 libavcodec 使用 x264 对捕获的 Windows 屏幕进行编码。由于输入是 RGB,我将其转换为 YUV 以使其与 x264 兼容。我正在使用 sws_scale 函数。我的问题是这个功能是否有任何替代品,因为在我的情况下我不需要进行任何缩放。此外,如果有人可以阐明此功能的工作流程,那将很有用。
PS:我假设 x264 仅在 YUV 颜色空间中运行。如果这个假设不正确,请同样通知我。
提前致谢。