2015-07-03 218 views
0

我通過套接字連接接收音頻和視頻RTP數據。現在我想將視頻和音頻RTP數據合併到MP4文件中。我怎樣才能做到這一點?我是否需要將視頻RTP分別保存到h264和音頻RTP到PCMU中,然後將它們合併到MP4文件中?或者是否可以直接將音頻視頻RTP合併到MP4文件中?將音頻和視頻RTP數據合併到mp4文件

提前致謝!

+0

我不認爲這個問題是特定於C++的,它更多的是關於哪個編解碼器與ffmpeg一起使用。 –

+0

是的,你是對的。假設語言不可知,你可以給出建議。 –

回答

1

您不需要創建單獨的音頻和視頻文件來將它們複合到MP4(或任何容器)。但在您的程序中,您需要將H.264和PCMU幀從RTP數據包中取出並傳輸到FFMPEG。

因此,在總結,你的程序的僞代碼看起來應該是這樣,

Main { 
    //Setup RTP receiver 
    //Configure MP4 Muxer of FFMPEG (set input and oputput format), your input is H.264 and PCMU and output is MP4 
    //avformat_alloc_output_context2 
    //avformat_new_stream 

    //Create Thread1 to read audio RTP packets 
    //Create Thread2 to read video RTP packets 

    //Complete writing MP4 file 
    //av_write_trailer 
} 

Thread1() 
{ 
    //Receive audio RTP packets 
    //Form an Audio frame 

    //Send the frame to muxer av_interleaved_write_frame 
} 

Thread1() 
{ 
    //Receive video RTP packets 
    //Form an Audio frame 

    //Send the frame to muxer av_interleaved_write_frame 
} 

希望這些幫助。在ffmpeg源代碼中提供的Muxer示例會很有幫助。 https://github.com/FFmpeg/FFmpeg/blob/master/doc/examples/muxing.c

+0

謝謝!希望它能爲我工作。 –

+0

是否可以使用FFMPEG同時呈現音頻視頻和錄製視頻? –

+1

是的。一旦你有數據,它取決於你的應用程序如何使用它。在一個使用案例中,我同時錄製和流式傳輸,使用FFMPEG進行錄製並使用Live555進行流式傳輸。 – pragnesh