gpt4 book ai didi

android - 将原始 yuv 帧提供给带有时间戳的 ffmpeg

转载 作者:行者123 更新时间:2023-12-04 23:04:00 25 4
gpt4 key购买 nike

我正在尝试将音频和视频原始数据传输到 ffmpeg 并通过 android 上的 RTSP 协议(protocol)推送实时流。
命令行看起来像这样

"ffmpeg -re -f image2pipe -vcodec mjpeg -i "+vpipepath
+ " -f s16le -acodec pcm_s16le -ar 8000 -ac 1 -i - "
+ " -vcodec libx264 "
+ " -preset slow -pix_fmt yuv420p -crf 30 -s 160x120 -r 6 -tune film "
+ " -g 6 -keyint_min 6 -bf 16 -b_strategy 1 "
+ " -acodec libopus -ac 1 -ar 48000 -b:a 80k -vbr on -frame_duration 20 "
+ " -compression_level 10 -application voip -packet_loss 20 "
+ " -f rtsp rtsp://remote-rtsp-server/live.sdp";

我将 libx264 用于视频编解码器,将 libopus 用于音频编解码器。
yuv 帧通过 mkfifo 创建的命名管道馈送,pcm 帧通过标准输入馈送。

它有效,我可以通过 ffplay 获取和播放流。但是存在严重的音频/视频同步问题。音频比视频晚 5~10 秒。
我想问题是 yuv 框架和 pcm 框架都没有任何时间戳。 FFmpeg 在提供数据时添加时间戳。但是音频/视频捕获线程不可能以相同的速率运行。
有没有办法为每个原始数据帧添加时间戳? (类似于 PST/DST?)

我使用的方式来自这个线程:
Android Camera Capture using FFmpeg

最佳答案

FFmpeg 在从管道中检索样本时添加时间戳,因此您需要做的就是同步输入它们。在您的情况下,可能的问题是您已经有一个音频缓冲区,并且正在实时提供视频帧。这会使音频延迟。您必须将视频帧缓冲到与缓冲音频相同的时间。如果您无法控制音频缓冲区的大小,请尝试使其尽可能小,监控其大小并相应地调整视频缓冲。

关于android - 将原始 yuv 帧提供给带有时间戳的 ffmpeg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25563495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com