Memory 使用gstreamer h264和x2B记录;mp4中的aac只生成部分可播放的文件

Memory 使用gstreamer h264和x2B记录;mp4中的aac只生成部分可播放的文件,memory,gstreamer,mux,Memory,Gstreamer,Mux,我正在尝试在gstreamer中构建流媒体应用程序,该应用程序a)从实时源捕获音频和视频b)将其编码为h264和aac,c)将其保存在file.mp4中 我正在使用以下管道在文件中记录: gst-launch-1.0 -e --gst-debug=**:4 videotestsrc is-live=true \ ! queue ! videoconvert \ ! videorate silent=false \ ! videoscale \ ! "video/x-raw, width=1280

我正在尝试在gstreamer中构建流媒体应用程序,该应用程序a)从实时源捕获音频和视频b)将其编码为h264和aac,c)将其保存在file.mp4中

我正在使用以下管道在文件中记录:

gst-launch-1.0 -e --gst-debug=**:4 videotestsrc is-live=true \
! queue ! videoconvert \
! videorate silent=false \
! videoscale \
! "video/x-raw, width=1280, height=720, framerate=25/1" \
! queue ! x264enc speed-preset=3 tune=zerolatency bitrate=3800 key-int-max=0 \
! queue ! muxer.video_0 \
audiotestsrc is-live=true \
! audioconvert ! audioresample ! audiorate ! "audio/x-raw, rate=48000, channels=2" \
! queue ! faac bitrate=128000 rate-control=2 \
! queue ! muxer.audio_0 \
mp4mux name=muxer streamable=true \
! queue ! filesink location="/home/myenc/mystream.mp4" sync=false
Q/问题:

如果我们将给定管道运行约1-2小时左右的短会话e.a.,那么它似乎没有问题。 但当我们运行的时间长一点时,记录文件会在文件中约4GB的某个地方被破坏(相当于物理RAM!) 例如:如果我们捕获360p 1Mbit,则文件可播放到4小时;如果我们捕获720p 4Mbit,则文件可播放到文件中1小时

有没有人经历过同样的问题,或者有人可以重现

这是qt/mp4mux的正常行为吗?例如,提到的“ensonic”

有解决办法吗

经过大量测试,我做出了一个假设,即它与物理内存以及mp4mux的工作原理有关。 然而,从机器上放置和/或移除额外的RAM对损坏的文件没有任何影响(在4GB之前仍然只能播放)

例如,任何指向正确方向的建议都将不胜感激

注意:

-在4GB之后,我能够生成的唯一可播放的录制文件是我们根本不使用任何muxer的时候(aka byte stream=true filename.h264)

-或者我们使用mpegtsmux,它不使用内存中的索引表

我的尝试:

  • 使用额外队列并将其放在元素之前/之后

  • 在队列中使用泄漏属性

  • 使用不同的音频/视频源(decklinksrc、videotestsrc、audiotestsrc)

  • 仅捕获视频,不捕获音频

  • 使用不同的音频编解码器(mp3)

  • 使用qtmux | mp4mux

  • mp4mux:尝试streamable=true,尝试faststart=true,尝试segmented=2000

  • 使用x264enc的tune=zerolatency属性播放

  • 使用OREANC+oggenc+oggmux与x264enc+faac

  • 在具有相同硬件的两台不同机器上进行测试

信息:

操作系统:Ubuntu 14.04

Gstreamer:1.4.5(也使用1.3.90进行测试)

程序:i5-3570@3.4Ghz


Ram:4GB(也用2GB、8GB测试)

这个问题最初由gstreamer-devel邮件列表回答,谢谢)->

总结:
gstreamer'qtmux'(mp4mux)中有一个bug,它生成的文件在4GB之后无法处理。在1.4.5中手动应用补丁后,我的问题得到解决

-错误描述:
-补丁提交: