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

Method writeMedia

MonaCore/sources/HTTP/HTTPWriter.cpp:154–205  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

152}
153
154bool HTTPWriter::writeMedia(MediaType type,UInt32 time,PacketReader& packet,const Parameters& properties) {
155 if(state()==CLOSED)
156 return true;
157 switch(type) {
158 case START:
159 case STOP:
160 break;
161 case INIT: {
162 if (time!=DATA) // one init by mediatype, we want here just init one time!
163 break;
164 Exception ex;
165 if (!_pRequest)
166 ex.set(Exception::APPLICATION, "HTTP streaming without request related");
167 else if (_pRequest->contentSubType.compare(0, 5, "x-flv")==0)
168 _pMedia.reset(new FLV(properties,_session.invoker.poolBuffers));
169 else if(_pRequest->contentSubType.compare(0,4,"mp2t")==0)
170 _pMedia.reset(new MPEGTS(_session.invoker.poolBuffers));
171 else
172 ex.set(Exception::APPLICATION, "HTTP streaming for a ",_pRequest->contentSubType," unsupported");
173
174 if (ex) {
175 close(ex);
176 return false;
177 }
178 // write a HTTP header without content-length (data==NULL and size==1)
179 _pMedia->write(createSender(true)->writeResponse("200 OK",true).packet);
180 break;
181 }
182 case AUDIO:
183 case VIDEO: {
184 if (!_pMedia)
185 return false;
186 HTTPSender* pSender(createSender(false));
187 if (!pSender)
188 return false;
189 _pMedia->write(pSender->writeRaw(),type,time,packet.current(), packet.available());
190 break;
191 }
192 case DATA: {
193 if (!_pMedia)
194 return false;
195 HTTPSender* pSender(createSender(false));
196 if (!pSender)
197 return false;
198 _pMedia->write(pSender->writeRaw(),(Writer::DataType)(time & 0xFF),(MIME::Type)(time >> 8),packet);
199 break;
200 }
201 default:
202 return Writer::writeMedia(type,time,packet,properties);
203 }
204 return true;
205}
206
207
208} // namespace Mona

Callers

nothing calls this directly

Calls 6

setMethod · 0.45
resetMethod · 0.45
writeMethod · 0.45
writeRawMethod · 0.45
currentMethod · 0.45
availableMethod · 0.45

Tested by

no test coverage detected