I have written protocol stacks for both H.323 and SIP, and these power switches providing basic VoIP telephony services.
My opinion is that H.323 is the superior protocol for basic telephony, although for more advanced features such as conferencing, SIP may be more appropriate.
H.323 is less open to misinterpretation, because it is defined using ASN.1 syntax. Encoding is using PER, which is hard work for an implementer, but worth the effort. SIP is text based, and very easy to make a mistake with.
H.323 call signalling is based on Q.931, which is a telecoms industry standard. This makes it easier to map messages to TDM based telecommunications links.
H.323 is TCP based. TCP is a connection orientated protocol, and provides a mechanism for retransmissions and error checking. SIP is usually UDP based, so retransmission is built into the protocol itself, which adds another overhead for the developer.
H.323 is mature and supported (almost required) by high end equipment. For example, although Quintum have included UA functionality in the gateways and switches, for any serious application, H.323 is required.
Perhaps this is a little unfair, but SIP seems to be a hobbyist’s protocol. I own and manage an ITSP (DUAL Talk). All of the serious business comes into my H.323 switch. Customers using SIP tend to have downloaded free copies of SER or Asterisk and originate very little traffic.
Having said these things, H.323 is not perfect. The Fast Start procedure for media negotiation is clumsy and there have been some backward compatibility issues in the past with H.323. Also, SoHo routers seem to handle SIP better than H.323.
It seems that SIP is gaining popularity for consumer applications and IP-PBX applications, whereas H.323 is holding on to the ground it has already gained in the business of switching revenue generating traffic.
But, at the end of the day, they are both only protocols that facilitate higher level applications, and they both do this well.