2015-11-23 76 views
0

我試圖將音頻流編碼爲文件。我收到的音頻緩衝劑,並使用avcodec_fill_audio_frame創建AVFrame並將其發送給avcodec_encode_audio2(之間有一些其他的東西 - 使用的ffmpeg muxing.c作爲一個例子我真的)ffmpeg - 用音頻樣本填充音頻幀

的事情是:音頻緩衝我收到了480個樣本,我使用的編解碼器有一個frame_size的1152(MP2)。結果是輸出的音頻文件有點「切碎」。聽起來每個音頻幀最後都有一些無聲樣本。

我該如何解決這個問題? 謝謝!

回答

0

在將幀傳遞到avcodec_encode_audio2之前,必須用frame_size(您的案例中的1152)樣本填充AVFrame

這聽起來像你的框架太小了。你如何設置它?你能顯示一些代碼嗎?

+0

我從JavaScript WebRTC收到它,並使用Google的Native Client對其進行編碼。 在C++方面,我使用pp :: MediaStreamAudioTrack([link](https://developer.chrome.com/native-client/pepper_dev/cpp/classpp_1_1_media_stream_audio_track))來處理流。然後我可以獲得緩衝區並進行配置。 這些都是我可以配置字段: PP_MEDIASTREAMAUDIOTRACK_ATTRIB_BUFFERS, PP_MEDIASTREAMAUDIOTRACK_ATTRIB_SAMPLE_RATE, PP_MEDIASTREAMAUDIOTRACK_ATTRIB_SAMPLE_SIZE, PP_MEDIASTREAMAUDIOTRACK_ATTRIB_CHANNELS, PP_MEDIASTREAMAUDIOTRACK_ATTRIB_DURATION。 你需要更多信息嗎? –

+0

我應該創建一箇中間緩衝區來填充它,直到1152,然後才發送給編碼器? 如果是這樣,我該如何創建並填充這個中間緩衝區? 謝謝:) –