virtual void onData(LiveTrack* track, uint8_t* p_buffer, int i_size, int i_truncated_bytes, int64_t pts, int64_t dts) { //std::cout << "Got Data. size = " << i_size << "; truncated bytes = " << i_truncated_bytes << "; pts = " << pts << "; dts = " << dts << std::endl; //std::cout << "Got Data. size = " << i_size << "; pts = " << pts << std::endl; int consumed; if (track->getFormat().i_codec != VLC_CODEC_H264) return; //std::cout << "Got H264 Data. size = " << i_size << "; truncated bytes = " << i_truncated_bytes << "; NAL type = " << (int)(p_buffer[4] & 0x1f) << std::endl; if (!decoder) { decoder = new VideoDecoder(); decoder->openCodec(0); if (track->getFormat().p_extra) { decoder->decode(track->getFormat().p_extra, track->getFormat().i_extra, consumed); } } uint8_t* tmp = p_buffer; int left = i_size; while (left) { AVFrame* ret = decoder->decode(tmp, left, consumed); if (ret) { av_frame_unref(ret); #ifdef TEST_MULTI_CLIENT std::cout << "client " << this << " got frame!!!\n"; #endif } tmp += consumed; left -= consumed; } }