Sachverhalt:
A. Am 15. September 2002 bestellte X._ bei A._ tele-fonisch ein halbes Kilogramm Heroin. Der Interessent erklärte, dieses zuerst testen zu wollen. Am Abend des gleichen Tages wurde ihm zu diesem Zweck beim Bahnhof Zürich-Stadelhofen ein Muster von Heroin übergeben. Da X._ die Qualität des Heroins bemängelte, kam es nicht zum beabsichtigten Geschäft. Am 19. September 2002 verkaufte A._ Y._ bei einem Treffen in Dübendorf 55 Gramm Heroin zum Preis von ca. Fr. 1'400.--. Er selber hatte die Drogen zuvor für ca. Fr. 1'100.-- erworben. Am 22. September 2002 nahm A._ von einem unter dem Namen Z._ bekannten Mann eine Bestellung von 10 Gramm Kokain und einem Kilogramm Streckmittel entgegen. Er besorgte darauf diesen Stoff bei einem Lieferanten und händigte ihn am 22. September 2002 dem Abnehmer in Regensdorf aus. Schliesslich begab sich A._ am 14. Oktober 2002 zur Asylbewerberunterkunft in Dübendorf, um dort Y._ 400 Gramm Heroin und 750 Gramm Streckmittel zu verkaufen. Vor der Übergabe wurde er verhaftet. Bei seiner Festnahme führte er 409 Gramm Heroin (Reinheit 3 %) und 750 Gramm Streckmittel sowie einen Revolver "Arminius" und fünf Patronen mit sich. Die Waffe und die dazugehörige Munition hatte er ohne die dafür erforderliche Bewilligung erworben.
Das Bezirksgericht Zürich verurteilte A._ am 22. Oktober 2003 wegen mehrfacher und teilweise qualifizierter Widerhandlung gegen das Betäubungsmittelgesetz sowie wegen Widerhandlung gegen das Waffengesetz zu 24 Monaten Gefängnis. Zugleich widerrief es den bedingten Vollzug von zwei früher ausgesprochenen Strafen von 7 Tagen Gefängnis und 60 Tagen Gefängnis. Das Obergericht des Kantons Zürich bestätigte am 14. Mai 2004 dieses Urteil vollumfänglich.
B. A._ erhebt eidgenössische Nichtigkeitsbeschwerde beim Bundesgericht und beantragt, es sei das Urteil des Obergerichts aufzuheben und die Sache zur Neubeurteilung an diese Instanz zurückzuweisen.
Das Obergericht verzichtet auf eine Stellungnahme zur Beschwerde. Eine Vernehmlassung der Staatsanwaltschaft wurde nicht eingeholt.

Das Bundesgericht zieht in Erwägung:
1. Die Beschwerde richtet sich allein gegen die Strafzumessung. Die Vorinstanz habe eine unverhältnismässig hohe Strafe ausgesprochen und damit ihr Ermessen überschritten. Im Kanton Zürich erfolgten bei vergleichbaren Drogengeschäften regelmässig bloss Verurteilungen zu bedingten Freiheitsstrafen von 18 Monaten.
1.1 Nach <ref-law> misst der Richter die Strafe nach dem Verschulden des Täters zu. Er berücksichtigt die Beweggründe, das Vorleben und die persönlichen Verhältnisse des Schuldigen. Die Schwere des Verschuldens bildet das zentrale Kriterium bei der Zumessung der Strafe. Bei deren Bestimmung hat der Richter die Umstände der Tat (sog. Tatkomponente) zu beachten, also das Ausmass des verschuldeten Erfolgs, die Art und Weise der Herbeiführung dieses Erfolgs, die Willensrichtung, mit welcher der Täter gehandelt hat, und die Beweggründe des Schuldigen. Je leichter es für ihn gewesen wäre, das Gesetz zu respektieren, desto schwerer wiegt dessen Missachtung und damit das Verschulden. Neben diesen auf die Tat bezogenen Faktoren sind auch täterbezogene Elemente (sog. Täterkomponente) zu berücksichtigen, so das Vorleben, die persönlichen Verhältnisse des Täters, weiter aber auch sein Verhalten nach der Tat und im Strafverfahren, allenfalls gezeigte Reue und Einsicht sowie die Strafempfindlichkeit (<ref-ruling> E. 6.1 S. 20; <ref-ruling> E. 2a S. 103; <ref-ruling> E. 1 S. 113 f.).
Dem Sachrichter steht bei der Gewichtung der genannten Strafzumessungskomponenten ein erheblicher Spielraum des Ermessens zu. Das Bundesgericht greift in diesen im Rahmen der Nichtigkeitsbeschwerde, mit der ausschliesslich eine Rechtsverletzung geltend gemacht werden kann, nur ein, wenn der kantonale Richter den gesetzlichen Strafrahmen über- oder unterschritten hat, wenn er von rechtlich nicht massgebenden Gesichtspunkten ausgegangen ist oder wenn er umgekehrt wesentliche Faktoren ausser Acht gelassen hat und schliesslich wenn er solche Elemente in Überschreitung oder Missbrauch seines Ermessens falsch gewichtet hat (<ref-ruling> E. 6.1 S. 21; <ref-ruling> E. 4a S. 295).
1.2 Der Beschwerdeführer rügt mit Nachdruck, dass die Vorinstanz sein Verschulden bei den Widerhandlungen gegen das Betäubungsmittelgesetz in unhaltbarer Weise als recht schwer einstufe. Sie gehe zu Unrecht von einer erheblichen Menge von gehandelten Betäubungsmitteln aus.
Diese Kritik verkennt, dass im angefochtenen Entscheid die fragliche Bewertung des Verschuldens für die Betäubungsmitteldelikte gesamthaft erfolgt. Die Vorinstanz übersieht nicht, dass dabei, soweit ein schwerer Fall vorliegt, die mengenmässige Grenze nur relativ knapp überschritten wurde. Sie misst indessen der Drogenmenge keine ausschlaggebende Bedeutung zu, sondern verweist auf weitere Tatumstände, die das Verschulden nicht mehr als leicht erscheinen lassen. So hat der Beschwerdeführer delinquiert, ohne selber drogenabhängig oder in einer finanziellen Notlage zu sein. Er verfügte vielmehr über eine feste Anstellung mit einem monatlichen Einkommen von Fr. 3'800.--. Ferner verweist sie auf das professionelle Vorgehen des Beschwerdeführers und seine Stellung als Zwischenhändler in der Drogenhandelshierarchie. Diese Gewichtung des Verschuldens bewegt sich im Rahmen des dem kantonalen Richter zustehenden Ermessens, da nach der Rechtsprechung der gehandelten Drogenmenge - und insbesondere auch dem Reinheitsgrad der Betäubungsmittel - bei der Strafzumessung keine vorrangige Bedeutung zukommt (<ref-ruling> E. 2c S. 301 f.; <ref-ruling> E. 2c S. 348). Die grössere Drogenmenge belegt im Übrigen, dass die Handelstätigkeit des Beschwerdeführers nicht in einem bloss bescheidenen Rahmen verblieb, auch wenn die Betäubungsmittel stark gestreckt waren.
1.3 Weiter beanstandet der Beschwerdeführer, dass im angefochtenen Entscheid seine persönlichen Verhältnisse bei der Strafzumessung nicht genügend berücksichtigt werden. Diese Rüge ist angesichts der entsprechenden Feststellungen im vorinstanzlichen Urteil und in jenem des Bezirksgerichts, worauf verwiesen wird, schwer verständlich. Die vom Beschwerdeführer behaupteten persönlichen und familiären Schwierigkeiten werden überhaupt nicht näher dargetan, noch bestehen dafür ausreichende Anhaltspunkte.
Der weitere Einwand, dass die Vorstrafen nicht deutlich straferhöhend hätten berücksichtigt werden dürfen, entbehrt ebenfalls der Grundlage. Denn eine der beiden Vorstrafen lag nur wenige Monate zurück und betraf ebenfalls eine Widerhandlung gegen das Waffengesetz, wobei der Beschwerdeführer damals sogar einige Zeit in Untersuchungshaft verbrachte. Ferner erscheint es nicht ermessensverletzend, wenn die Vorinstanz dem Geständnis, das der Beschwerdeführer bei ihr abgelegt hat, keine erhebliche strafmindernde Bedeutung beimisst, da dieses ganz offensichtlich aus taktischen Gründen erfolgte. Es ist im Ergebnis auch nicht ausschlaggebend, wenn die Vorinstanz das Geständnis etwas stärker strafmindernd berücksichtigt als das Bezirksgericht, umgekehrt aber das Tatverschulden etwas grösser einstuft. Schliesslich begründet der Beschwerdeführer nicht näher, welche Tatsachen seine Einsicht, Reue und das behauptete kooperative Verhalten in der Strafuntersuchung belegen sollten. Die angeführte Belastung eines Mittäters bildet jedenfalls unter den gegebenen Umständen noch keinen zwingenden Grund für eine Strafminderung.
1.4 Der Beschwerdeführer rügt die vorinstanzliche Strafzumessung auch im Ergebnis als unhaltbar und stellt ihr seine eigene Bestimmung des Strafmasses gegenüber. Eine solche Berechnung vermag indessen noch keine Ermessensverletzung darzulegen. Es trifft auch nicht zu, dass die Begründung der Strafzumessung im angefochtenen Entscheid ungenügend und zu wenig transparent ist. Der Beschwerdeführer übersieht, dass im Urteil nicht in absoluten Zahlen oder Prozenten angegeben werden muss, inwieweit bestimmte strafzumessungsrelevante Tatsachen straferhöhend oder strafmindernd berücksichtigt werden. Der kantonale Richter muss ebenso wenig ausdrücklich eine "Einsatzstrafe" beziffern, die er bei Fehlen bestimmter Strafschärfungs- und Strafmilderungsgründe ausgefällt hätte (<ref-ruling> E. 2a/aa S. 56). Auch wenn es zutreffen mag, dass bei alleiniger Betrachtung der gehandelten Drogenmenge bzw. des Reinheitsgehalts in vergleichbaren Fällen bedingte Freiheitsstrafen ausgesprochen werden, bedeutet dies nicht, dass gegenüber dem Beschwerdeführer ebenfalls lediglich eine solche Sanktion auszufällen ist. Die Vorinstanz legt vielmehr eingehend dar, dass die beurteilten Taten sich vom Durchschnittsfall abheben, weil das Tatverschulden bedeutend ist, und dass ausserdem verschiedenen strafschärfenden bzw. deutlich -erhöhenden Umständen nur das geringfügig strafmindernde Geständnis gegenübersteht.
Der angefochtene Entscheid verletzt daher kein Bundesrecht.
2. Die eidgenössische Nichtigkeitsbeschwerde erweist sich somit als unbegründet und ist abzuweisen. Damit wird das Gesuch um aufschiebende Wirkung gegenstandslos.
Bei diesem Ausgang des Verfahrens sind die bundesgerichtlichen Kosten dem Beschwerdeführer aufzuerlegen (Art. 278 Abs. 1 BStP).

Demnach erkennt das Bundesgericht im Verfahren nach
Art. 36a OG:
1. Die eidgenössische Nichtigkeitsbeschwerde wird abgewiesen.
2. Die Gerichtsgebühr von Fr. 2'000.-- wird dem Beschwerdeführer auferlegt.
3. Dieses Urteil wird dem Beschwerdeführer, der Staatsanwaltschaft des Kantons Zürich und dem Obergericht des Kantons Zürich, II. Strafkammer, schriftlich mitgeteilt.
Lausanne, 23. Dezember 2004
Im Namen des Kassationshofes
des Schweizerischen Bundesgerichts
Der Präsident: Die Gerichtsschreiberin: