| 567 | } |
| 568 | |
| 569 | int CLiveWorker::get_ps_data(char* pBuff, int &nLen) |
| 570 | { |
| 571 | if(m_nTmpBuffReaded >= m_PsStream.size()) { |
| 572 | AV_BUFF* tag = (AV_BUFF*)ring_get_element(m_pPSRing, NULL); |
| 573 | if(!tag) |
| 574 | return 0; |
| 575 | |
| 576 | m_PsStream.clear(); |
| 577 | m_PsStream.append_data(tag->pData, tag->nLen); |
| 578 | m_nTmpBuffReaded = 0; |
| 579 | simple_ring_cosume(m_pPSRing); |
| 580 | |
| 581 | //Log::debug("get ps %x, %d, %d", tag->pData, tag->nLen, ring_get_count_free_elements(m_pPSRing)); |
| 582 | |
| 583 | if(!m_bParseKey) { |
| 584 | if(is_key(m_PsStream.get(), m_PsStream.size())){ |
| 585 | m_bParseKey = true; |
| 586 | } else { |
| 587 | Log::warning("no key frame before this"); |
| 588 | m_PsStream.clear(); |
| 589 | return 0; |
| 590 | } |
| 591 | } |
| 592 | } |
| 593 | |
| 594 | int len = m_PsStream.size() - m_nTmpBuffReaded; |
| 595 | if(len > nLen) |
| 596 | len = nLen; |
| 597 | memcpy(pBuff, m_PsStream.get()+m_nTmpBuffReaded, len); |
| 598 | m_nTmpBuffReaded += len; |
| 599 | |
| 600 | return len; |
| 601 | } |
| 602 | |
| 603 | void CLiveWorker::push_flv_frame(char* pBuff, int nLen) |
| 604 | { |
no test coverage detected