| 79 | } |
| 80 | |
| 81 | bool FlashWriter::writeMedia(MediaType type,UInt32 time,PacketReader& packet,const Parameters& properties) { |
| 82 | |
| 83 | switch(type) { |
| 84 | case INIT: |
| 85 | if (time == AUDIO) { |
| 86 | _onAudio.clear(); |
| 87 | if (properties.getString("onAudio", _onAudio) && amf0) { |
| 88 | WARN("Impossible to handle onAudio properties on a AMF0 stream (no ByteArray support)") |
| 89 | _onAudio.clear(); |
| 90 | } |
| 91 | } else if (time == VIDEO) { |
| 92 | _onVideo.clear(); |
| 93 | if (properties.getString("onVideo", _onVideo) && amf0) { |
| 94 | WARN("Impossible to handle onVideo properties on a AMF0 stream (no ByteArray support)") |
| 95 | _onVideo.clear(); |
| 96 | } |
| 97 | } |
| 98 | break; |
| 99 | case START: |
| 100 | if (time==DATA) |
| 101 | writeAMFStatus("NetStream.Play.PublishNotify",string(STR packet.current(),packet.available()) + " is now published"); |
| 102 | break; |
| 103 | case STOP: |
| 104 | if (time==DATA) |
| 105 | writeAMFStatus("NetStream.Play.UnpublishNotify",string(STR packet.current(),packet.available()) + " is now unpublished"); |
| 106 | break; |
| 107 | case AUDIO: |
| 108 | if (!_onAudio.empty()) { |
| 109 | AMFWriter& writer(writeAMFData(_onAudio)); |
| 110 | writer.writeNumber(time); |
| 111 | writer.writeBytes(packet.current(),packet.available()); |
| 112 | } else |
| 113 | write(AMF::AUDIO,time,packet.current(),packet.available()); |
| 114 | break; |
| 115 | case VIDEO: |
| 116 | if (!_onVideo.empty()) { |
| 117 | AMFWriter& writer(writeAMFData(_onVideo)); |
| 118 | writer.writeNumber(time); |
| 119 | writer.writeBytes(packet.current(),packet.available()); |
| 120 | |
| 121 | } else |
| 122 | write(AMF::VIDEO,time,packet.current(),packet.available()); |
| 123 | break; |
| 124 | case DATA: { |
| 125 | // convert to AMF ? |
| 126 | MIME::Type dataType((MIME::Type)(time >> 8)); |
| 127 | if (dataType!=MIME::AMF) { |
| 128 | unique_ptr<DataReader> pReader; |
| 129 | if (!MIME::CreateDataReader(dataType, packet,poolBuffers, pReader)) { |
| 130 | ERROR("Impossible to convert streaming ", dataType, " data to AMF, data ignored") |
| 131 | break; |
| 132 | } |
| 133 | AMFWriter& writer(write(AMF::DATA, 0)); |
| 134 | if (DataReader::STRING == pReader->nextType()) { |
| 135 | // Write the handler name in AMF0! |
| 136 | writer.amf0 = true; |
| 137 | pReader->read(writer, 1); |
| 138 | writer.amf0 = false; |
nothing calls this directly
no test coverage detected