<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                目標: 關注聲音回調函數與 聲音解碼函數的關系 關注視頻幀調用過程 未完成 測試案列: 測試平臺: 測試代碼: 首先來說,為什么可以出聲音,我認為是這個函數 SDL_pauseAudio 的行為. ### 關注聲音回調函數與 解碼的關系 用數據來說話,分別在兩個位置下斷點 位置一是:audio_callback函數位置 位置二是:audio_decode_frame解碼函數位置 讓我們來看看實際的代碼: ~~~ void audio_callback(void *userdata, Uint8 *stream, int len) { AVCodecContext *aCodecCtx = (AVCodecContext *)userdata; int len1, audio_size; static uint8_t audio_buf[(MAX_AUDIO_FRAME_SIZE * 3) / 2]; static unsigned int audio_buf_size = 0; static unsigned int audio_buf_index = 0; while(len > 0) { if(audio_buf_index >= audio_buf_size) { ~~~ ~~~ /* We have already sent all our data; get more */ audio_size = audio_decode_frame(aCodecCtx, audio_buf, audio_buf_size);//請特別注意。 ~~~ ~~~ if(audio_size < 0) { /* If error, output silence */ audio_buf_size = 1024; // arbitrary? memset(audio_buf, 0, audio_buf_size); } else { audio_buf_size = audio_size; } audio_buf_index = 0; } ~~~ ~~~ len1 = audio_buf_size - audio_buf_index; if(len1 > len) len1 = len; memcpy(stream, (uint8_t *)audio_buf + audio_buf_index, len1); len -= len1; stream += len1; audio_buf_index += len1; } } ~~~ 結果如下,可以看到至少4次audio_decode_frame后,系統將會調用 回調函數。這樣的回調會周期性發生。 有同學會問,為什么是4次?我想要么是給系統回調的聲音buffer放滿了,要么是audio_callback 定時調用。 ~~~ Function: audio_callback(void *, unsigned char *, int), Thread: 0x81B8 Win32 線程 Function: audio_decode_frame(AVCodecContext *, unsigned char *, int), Thread: 0x81B8 Win32 線程 Function: audio_decode_frame(AVCodecContext *, unsigned char *, int), Thread: 0x81B8 Win32 線程 Function: audio_decode_frame(AVCodecContext *, unsigned char *, int), Thread: 0x81B8 Win32 線程 Function: audio_decode_frame(AVCodecContext *, unsigned char *, int), Thread: 0x81B8 Win32 線程 Function: audio_callback(void *, unsigned char *, int), Thread: 0x81B8 Win32 線程 Function: audio_decode_frame(AVCodecContext *, unsigned char *, int), Thread: 0x81B8 Win32 線程 Function: audio_decode_frame(AVCodecContext *, unsigned char *, int), Thread: 0x81B8 Win32 線程 Function: audio_decode_frame(AVCodecContext *, unsigned char *, int), Thread: 0x81B8 Win32 線程 Function: audio_decode_frame(AVCodecContext *, unsigned char *, int), Thread: 0x81B8 Win32 線程 Function: audio_callback(void *, unsigned char *, int), Thread: 0x81B8 Win32 線程 Function: audio_decode_frame(AVCodecContext *, unsigned char *, int), Thread: 0x81B8 Win32 線程 Function: audio_decode_frame(AVCodecContext *, unsigned char *, int), Thread: 0x81B8 Win32 線程 Function: audio_decode_frame(AVCodecContext *, unsigned char *, int), Thread: 0x81B8 Win32 線程 Function: audio_decode_frame(AVCodecContext *, unsigned char *, int), Thread: 0x81B8 Win32 線程 Function: audio_decode_frame(AVCodecContext *, unsigned char *, int), Thread: 0x81B8 Win32 線程 Function: audio_callback(void *, unsigned char *, int), Thread: 0x81B8 Win32 線程 Function: audio_decode_frame(AVCodecContext *, unsigned char *, int), Thread: 0x81B8 Win32 線程 Function: audio_decode_frame(AVCodecContext *, unsigned char *, int), Thread: 0x81B8 Win32 線程 Function: audio_decode_frame(AVCodecContext *, unsigned char *, int), Thread: 0x81B8 Win32 線程 Function: audio_decode_frame(AVCodecContext *, unsigned char *, int), Thread: 0x81B8 Win32 線程 Function: audio_callback(void *, unsigned char *, int), Thread: 0x81B8 Win32 線程 Function: audio_decode_frame(AVCodecContext *, unsigned char *, int), Thread: 0x81B8 Win32 線程 Function: audio_decode_frame(AVCodecContext *, unsigned char *, int), Thread: 0x81B8 Win32 線程 Function: audio_decode_frame(AVCodecContext *, unsigned char *, int), Thread: 0x81B8 Win32 線程 Function: audio_decode_frame(AVCodecContext *, unsigned char *, int), Thread: 0x81B8 Win32 線程 ~~~ ### 關注視頻幀調用過程 之所以貼在這里,想以后再分析,再給出結果。 理論上,12個時刻,應該對應12個不同的幀,但是結果不是,看看以下結果(用notepad++處理后,用于統計個數)。 ~~~ Search "video" (11 hits in 1 file) new 2 (11 hits) Line 120: read one video frame Line 286: read one video frame Line 291: read one video frame Line 292: read one video frame Line 293: read one video frame Line 294: read one video frame Line 295: read one video frame Line 296: read one video frame Line 297: read one video frame Line 298: read one video frame Line 299: read one video frame Search "audio" (288 hits in 1 file) ~~~ ###未完成 其他:看看第一次調用audio_callback時,是否遇到返回為空的情形。 其他:請打印出每次解碼出的buffer大小,尤其注意那個中間連續調用五次解碼的過程。 其他:是否可以結合dump出的文件信息,量化分析過程。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看