【发布时间】:2014-08-29 07:24:51
【问题描述】:
我正在尝试将音频和视频原始数据传输到 ffmpeg 并通过 Android 上的 RTSP 协议推送实时流。 命令行是这样的
"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
【问题讨论】: