0
我试图通过RTSP协议在管道上将音频和视频原始数据传输到ffmpeg并推送实时流。 命令行是这个样子将原始的yuv帧添加到带有时间戳的ffmpeg
"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帧通过stdin馈送。
它有效,我可以通过ffplay获取并播放流。但是存在有用的音频/视频同步问题。音频比视频晚5到10秒。 我想这个问题既是yuv帧,也是pcm帧没有任何时间戳。 FFmpeg在添加数据时添加时间戳。但音频/视频捕获线程不可能以相同的速率运行。 有没有办法给每个原始数据框添加时间戳? (?像PST/DST)
我用的方式是从这个线程: Android Camera Capture using FFmpeg
thx,但最后我发现我无法以这种方式同步视频/音频。我需要通过编码手动添加时间戳。 – 2014-09-02 03:02:37
对于其他人如何感兴趣:我在答案中描述的内容完美无缺(因为我在自己的代码中使用它)。当然,您可以按照OP的路径使用API。 – 2017-04-30 14:55:50