I've finally figured out how to do portal occlusion culling with view frustum planes and portal AABB.
First the view frustum has planes in it that check for portal AABB.
The view frustum only checks for portals in the sector the player is in.
If a portal is in the frustum planes then render the next sector and stop.
Then the portal that is visible gets planes added to it, behind it and the planes follow the main camera.
The portal planes check for visible portals AABB in the sector it is connected to and stops after rendering the next sector.
This repeats until there are no more sectors with visible portals.
The view frustum portal checking stops at the sector the player is in and the portals do the check on the next sector and stop at the sector they are connected to.
This is way better than using raycasts for visibility.