Ваша программа могла бы передать самому rtp через ffmpeg
- даже вызывая его, используя popen3()
.
Похоже, вам нужно использовать промежуточный файл SDP - я предполагаю, что вы можете указать файл, который вы создали как именованный канал или с tmpfile()
, в которую ваше приложение пишет - используя файл в качестве посредника.
Командная строка будет что-то вроде:
int p[3];
const char* const out_fmt = "avi";
const char* cmd[] = {"ffmpeg","-f",,"-i",temp_sdp_filename,"-vcodec","copy","-f",out_fmt,"-",NULL};
if(-1 == popen3(p,cmd)) ...
// write the rtp that you receive to p[STDIN_FILENO]
// read the avi from p[STDOUT_FILENO]
// read any messages and error text from p[STDERR_FILENO]
Я считаю, что в этом случае ffmpeg достаточно умен, чтобы перепаковать контейнер (поток rtp против AVI) без перекодирования видео и аудио (это переключатель -vcodec copy
); следовательно, у вас не будет потери качества, и это будет невероятно быстро.