正在显示
1 个修改的文件
包含
72 行增加
和
72 行删除
| @@ -764,6 +764,78 @@ bool srs_hls_can_continue(int ret, SrsSharedPtrMessage* sh, SrsSharedPtrMessage* | @@ -764,6 +764,78 @@ bool srs_hls_can_continue(int ret, SrsSharedPtrMessage* sh, SrsSharedPtrMessage* | ||
| 764 | return false; | 764 | return false; |
| 765 | } | 765 | } |
| 766 | 766 | ||
| 767 | +SrsMixQueue::SrsMixQueue() | ||
| 768 | +{ | ||
| 769 | + nb_videos = 0; | ||
| 770 | + nb_audios = 0; | ||
| 771 | +} | ||
| 772 | + | ||
| 773 | +SrsMixQueue::~SrsMixQueue() | ||
| 774 | +{ | ||
| 775 | + clear(); | ||
| 776 | +} | ||
| 777 | + | ||
| 778 | +void SrsMixQueue::clear() | ||
| 779 | +{ | ||
| 780 | + std::multimap<int64_t, SrsSharedPtrMessage*>::iterator it; | ||
| 781 | + for (it = msgs.begin(); it != msgs.end(); ++it) { | ||
| 782 | + SrsSharedPtrMessage* msg = it->second; | ||
| 783 | + srs_freep(msg); | ||
| 784 | + } | ||
| 785 | + msgs.clear(); | ||
| 786 | + | ||
| 787 | + nb_videos = 0; | ||
| 788 | + nb_audios = 0; | ||
| 789 | +} | ||
| 790 | + | ||
| 791 | +void SrsMixQueue::push(SrsSharedPtrMessage* msg) | ||
| 792 | +{ | ||
| 793 | + msgs.insert(std::make_pair(msg->timestamp, msg)); | ||
| 794 | + | ||
| 795 | + if (msg->is_video()) { | ||
| 796 | + nb_videos++; | ||
| 797 | + } else { | ||
| 798 | + nb_audios++; | ||
| 799 | + } | ||
| 800 | +} | ||
| 801 | + | ||
| 802 | +SrsSharedPtrMessage* SrsMixQueue::pop() | ||
| 803 | +{ | ||
| 804 | + bool mix_ok = false; | ||
| 805 | + | ||
| 806 | + // pure video | ||
| 807 | + if (nb_videos >= SRS_MIX_CORRECT_PURE_AV && nb_audios == 0) { | ||
| 808 | + mix_ok = true; | ||
| 809 | + } | ||
| 810 | + | ||
| 811 | + // pure audio | ||
| 812 | + if (nb_audios >= SRS_MIX_CORRECT_PURE_AV && nb_videos == 0) { | ||
| 813 | + mix_ok = true; | ||
| 814 | + } | ||
| 815 | + | ||
| 816 | + // got 1 video and 1 audio, mix ok. | ||
| 817 | + if (nb_videos >= 1 && nb_audios >= 1) { | ||
| 818 | + mix_ok = true; | ||
| 819 | + } | ||
| 820 | + | ||
| 821 | + if (!mix_ok) { | ||
| 822 | + return NULL; | ||
| 823 | + } | ||
| 824 | + | ||
| 825 | + // pop the first msg. | ||
| 826 | + std::multimap<int64_t, SrsSharedPtrMessage*>::iterator it = msgs.begin(); | ||
| 827 | + SrsSharedPtrMessage* msg = it->second; | ||
| 828 | + msgs.erase(it); | ||
| 829 | + | ||
| 830 | + if (msg->is_video()) { | ||
| 831 | + nb_videos--; | ||
| 832 | + } else { | ||
| 833 | + nb_audios--; | ||
| 834 | + } | ||
| 835 | + | ||
| 836 | + return msg; | ||
| 837 | +} | ||
| 838 | + | ||
| 767 | SrsOriginHub::SrsOriginHub(SrsSource* s) | 839 | SrsOriginHub::SrsOriginHub(SrsSource* s) |
| 768 | { | 840 | { |
| 769 | source = s; | 841 | source = s; |
| @@ -1659,78 +1731,6 @@ void SrsSource::destroy() | @@ -1659,78 +1731,6 @@ void SrsSource::destroy() | ||
| 1659 | pool.clear(); | 1731 | pool.clear(); |
| 1660 | } | 1732 | } |
| 1661 | 1733 | ||
| 1662 | -SrsMixQueue::SrsMixQueue() | ||
| 1663 | -{ | ||
| 1664 | - nb_videos = 0; | ||
| 1665 | - nb_audios = 0; | ||
| 1666 | -} | ||
| 1667 | - | ||
| 1668 | -SrsMixQueue::~SrsMixQueue() | ||
| 1669 | -{ | ||
| 1670 | - clear(); | ||
| 1671 | -} | ||
| 1672 | - | ||
| 1673 | -void SrsMixQueue::clear() | ||
| 1674 | -{ | ||
| 1675 | - std::multimap<int64_t, SrsSharedPtrMessage*>::iterator it; | ||
| 1676 | - for (it = msgs.begin(); it != msgs.end(); ++it) { | ||
| 1677 | - SrsSharedPtrMessage* msg = it->second; | ||
| 1678 | - srs_freep(msg); | ||
| 1679 | - } | ||
| 1680 | - msgs.clear(); | ||
| 1681 | - | ||
| 1682 | - nb_videos = 0; | ||
| 1683 | - nb_audios = 0; | ||
| 1684 | -} | ||
| 1685 | - | ||
| 1686 | -void SrsMixQueue::push(SrsSharedPtrMessage* msg) | ||
| 1687 | -{ | ||
| 1688 | - msgs.insert(std::make_pair(msg->timestamp, msg)); | ||
| 1689 | - | ||
| 1690 | - if (msg->is_video()) { | ||
| 1691 | - nb_videos++; | ||
| 1692 | - } else { | ||
| 1693 | - nb_audios++; | ||
| 1694 | - } | ||
| 1695 | -} | ||
| 1696 | - | ||
| 1697 | -SrsSharedPtrMessage* SrsMixQueue::pop() | ||
| 1698 | -{ | ||
| 1699 | - bool mix_ok = false; | ||
| 1700 | - | ||
| 1701 | - // pure video | ||
| 1702 | - if (nb_videos >= SRS_MIX_CORRECT_PURE_AV && nb_audios == 0) { | ||
| 1703 | - mix_ok = true; | ||
| 1704 | - } | ||
| 1705 | - | ||
| 1706 | - // pure audio | ||
| 1707 | - if (nb_audios >= SRS_MIX_CORRECT_PURE_AV && nb_videos == 0) { | ||
| 1708 | - mix_ok = true; | ||
| 1709 | - } | ||
| 1710 | - | ||
| 1711 | - // got 1 video and 1 audio, mix ok. | ||
| 1712 | - if (nb_videos >= 1 && nb_audios >= 1) { | ||
| 1713 | - mix_ok = true; | ||
| 1714 | - } | ||
| 1715 | - | ||
| 1716 | - if (!mix_ok) { | ||
| 1717 | - return NULL; | ||
| 1718 | - } | ||
| 1719 | - | ||
| 1720 | - // pop the first msg. | ||
| 1721 | - std::multimap<int64_t, SrsSharedPtrMessage*>::iterator it = msgs.begin(); | ||
| 1722 | - SrsSharedPtrMessage* msg = it->second; | ||
| 1723 | - msgs.erase(it); | ||
| 1724 | - | ||
| 1725 | - if (msg->is_video()) { | ||
| 1726 | - nb_videos--; | ||
| 1727 | - } else { | ||
| 1728 | - nb_audios--; | ||
| 1729 | - } | ||
| 1730 | - | ||
| 1731 | - return msg; | ||
| 1732 | -} | ||
| 1733 | - | ||
| 1734 | SrsSource::SrsSource() | 1734 | SrsSource::SrsSource() |
| 1735 | { | 1735 | { |
| 1736 | req = NULL; | 1736 | req = NULL; |
-
请 注册 或 登录 后发表评论