gpt4 book ai didi

c - ffmpeg - 转换时不允许操作错误

转载 作者:太空宇宙 更新时间:2023-11-04 09:52:32 27 4
gpt4 key购买 nike

我正在开发一个安卓应用。我的要求是在 android 上实现一个 rtsp 流媒体服务器。它必须直播使用 MediaRecorder 捕获的视频和音频。另一个要求是我必须使用 live555 作为流媒体服务器。我从 MediaRecorder 得到的是 MP4 或 3GP 格式。 live555 无法同时流式传输。但如果我只以“RAW_AMR”格式录制它,它可以流式传输音频。由于 live555 支持 'mpg' 流媒体格式,我决定在中间放置一个可以将 'mp4' 或 '3gp' 转换为 'mpg' 的人,我选择了 ffmpeg。

我已将 live555 和 ffmpeg 移植到 android。 ffmpeg 能够在完成后转换 MediaRecorder 录制的文件。但问题是ffmpeg无法并发。也就是说,ffmpeg 无法在录制时转换文件。它显示 Operation not permitted 错误。我在我的 linux 机器上尝试了同样的方法,在 android 上使用 VLC 而不是 MediaRecorder 进行记录。结果是一样的。 ffmpeg 能够在录制完成后进行转换,而在录制时不能进行同样的操作。

这是我在我的 linux 机器上发出的 ffmpeg 命令:

ffmpeg -v 9 -loglevel 99 -i test.mp4 test.mpg

test.mp4 是 VLC 以 ​​mp4 格式录制的文件。 test.mpg 是我的目标文件。以下是ffmpeg在终端上的输出。

ffmpeg version 0.8.9, Copyright (c) 2000-2011 the FFmpeg developers
built on Feb 1 2012 18:29:27 with gcc 4.6.2 20111027 (Red Hat 4.6.2-1)
configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --extra-cflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' --enable-bzlib --enable-libcelt --enable-libdc1394 --enable-libdirac --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --enable-x11grab --enable-avfilter --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-stripping --shlibdir=/usr/lib64 --enable-runtime-cpudetect
libavutil 51. 9. 1 / 51. 9. 1
libavcodec 53. 8. 0 / 53. 8. 0
libavformat 53. 5. 0 / 53. 5. 0
libavdevice 53. 1. 1 / 53. 1. 1
libavfilter 2. 23. 0 / 2. 23. 0
libswscale 2. 0. 0 / 2. 0. 0
libpostproc 51. 2. 0 / 51. 2. 0
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x1672600] Format mov,mp4,m4a,3gp,3g2,mj2 probed with size=2048 and score=100
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x1672600] ISO: File Type Major Brand: isom
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x1672600] moov atom not found
test.mp4: Operation not permitted

谁能告诉我是什么导致了这个问题?或者 ffmpeg 是否可以实现上述场景。也就是说,ffmpeg是否能够在录制的同时进行转换?如果 ffmpeg 无法做到这一点,您能否提出任何替代解决方案?

注意:我放置了一个 C 标签,因为如果可以通过在 ffmpeg 上对 C 进行一些调整,我准备这样做(我非常想要解决方案)。但请提供一些指向正确方向的指示。

最佳答案

3gpmp4 格式都包含在文件完成时写入的 moov 原子(数据 block )。在此之前文件是不完整的。

您可以使用 FLV 作为“中间”格式。也可以使用其他支持直播的格式。如果需要,选项 -re 可能有助于告诉编码器以流速率运行。

另见 Is it possible to play an output video file from an encoder as it's being encoded? .

关于c - ffmpeg - 转换时不允许操作错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9356960/

27 4 0
文章推荐: python - 如果包含非零元素,则获取列表
文章推荐: html - 无法将背景图片添加到我的
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com