MCPcopy Create free account
hub / github.com/MonaSolutions/MonaServer / writeMedia

Method writeMedia

MonaCore/sources/FlashWriter.cpp:81–150  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

79}
80
81bool 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;

Callers

nothing calls this directly

Calls 9

nextTypeMethod · 0.80
clearMethod · 0.45
getStringMethod · 0.45
currentMethod · 0.45
availableMethod · 0.45
emptyMethod · 0.45
writeNumberMethod · 0.45
writeBytesMethod · 0.45
readMethod · 0.45

Tested by

no test coverage detected