void eServicePlaylistHandler::addFile(void *node, const eString &filename) { if (filename.right(4).upper()==".M3U") eServiceFileHandler::getInstance()->addReference(node, eServiceReference(id, eServiceReference::mustDescent| eServiceReference::canDescent| eServiceReference::sort1, filename)); }
void eServiceHandlerDVB::addFile(void *node, const eString &filename) { if (filename.right(3).upper()==".TS") { // struct stat64 s; // if (::stat64(filename.c_str(), &s)) // return; eServiceFileHandler::getInstance()->addReference(node, eServiceReference(id, 0, filename)); } }
void eServiceHandlerExternal::addDirectory(void *node, const eString &filename) { for (unsigned int i = 0; i < extensionDirectoryList.size(); i++) { int matchsize = extensionDirectoryList[i].pattern.length(); if (filename.right(matchsize).upper() == extensionDirectoryList[i].pattern.upper()) { eServiceReference ref(id, 0, filename); ref.descr = _("Start player"); eServiceFileHandler::getInstance()->addReference(node, ref); eDebug("Add directory: %s", filename.c_str()); return; } } }
void eServiceHandlerExternal::addFile(void *node, const eString &filename) { for (unsigned int i = 0; i < extensionFileList.size(); i++) { int matchsize = extensionFileList[i].pattern.length(); if (filename.right(matchsize).upper() == extensionFileList[i].pattern.upper()) { eServiceReference ref(id, 0, filename); eString filenamestripped = filename; uint i = filename.find_last_of('/'); if (i != eString::npos) { filenamestripped = filename.mid(i + 1, filename.length()); } ref.descr = filenamestripped.c_str(); eServiceFileHandler::getInstance()->addReference(node, ref); eDebug("Add file: %s", filename.c_str()); return; } } }
eString eMoviePlayer::sout(eString mrl) { eString soutURL = "#"; unsigned int pos = mrl.find_last_of('.'); eString extension = mrl.right(mrl.length() - pos - 1); eString name = "File"; if (mrl.find("dvdsimple:") != eString::npos) { name = "DVD"; extension = "NONE"; } else if (mrl.find("vcd:") != eString::npos) { name = "VCD"; extension = "NONE"; } struct serverConfig server = mpconfig.getServerConfig(); struct videoTypeParms video = mpconfig.getVideoParms(name, extension); eDebug("[MOVIEPLAYER] determine ?sout for mrl: %s", mrl.c_str()); eDebug("[MOVIEPLAYER] transcoding audio: %d, video: %d, subtitles: %d" , video.transcodeAudio, video.transcodeVideo, status.PLG ? status.SUBT : video.soutadd); // add sout (URL encoded) // example (with transcode to mpeg1): // ?sout=#transcode{vcodec=mpgv,vb=2000,acodec=mpga,ab=192,channels=2}:duplicate{dst=std{access=http,mux=ts,url=:8080/dboxstream}} // example (without transcode to mpeg1): // ?sout=#duplicate{dst=std{access=http,mux=ts,url=:8080/dboxstream}} pos = video.videoRatio.find("x"); eString res_horiz = video.videoRatio.left(pos); eString res_vert = video.videoRatio.right(video.videoRatio.length() - pos - 1); eDebug("[MOVIEPLAYER] res_horiz = %s, res_vert = %s", res_horiz.c_str(), res_vert.c_str()); if (video.transcodeVideo || video.transcodeAudio) { soutURL += "transcode{"; if (video.transcodeVideo) { soutURL += "vcodec=" + video.videoCodec; soutURL += ",vb=" + video.videoRate; soutURL += ",width=" + res_horiz; soutURL += ",height=" + res_vert; soutURL += ",fps=" + video.fps; if(status.PLG) { if(status.SUBT) soutURL += ",soverlay"; } else { if (video.soutadd) soutURL += ",soverlay"; } } if (video.transcodeAudio) { if (video.transcodeVideo) soutURL += ","; soutURL += "acodec=mpga,ab=" + video.audioRate + ",channels=2"; } if(status.PLG) { if(status.A_SYNC) soutURL += ",audio-sync"; } else soutURL += ",audio-sync"; soutURL += "}:"; } //soutURL += "duplicate{dst=std{access=http,mux=ts,dst=:" + server.streamingPort + "/dboxstream}}"; soutURL += "standard{access=http,mux=ts,dst=:" + server.streamingPort + "/dboxstream}"; status.A_SYNC=true; status.SUBT = true; eDebug("[MOVIEPLAYER] sout = %s", soutURL.c_str()); return soutURL; }
int eMoviePlayer::playStream(eString mrl) { int apid = -1, vpid = -1, ac3 = -1; // receive video stream from VLC on PC eDebug("[MOVIEPLAYER] start playing stream..."); status.BUFFERFILLED = false; pthread_mutex_lock(&mutex); tsBuffer.clear(); pthread_mutex_unlock(&mutex); if (requestStream() < 0) { eDebug("[MOVIEPLAYER] requesting stream failed..."); close(fd); return -1; } int ibuff; if(status.PLG) ibuff = initialBuffer; else ibuff = INITIALBUFFER; if (bufferStream(fd, ibuff) == 0) { eDebug("[MOVIEPLAYER] buffer is empty."); close(fd); if (cancelBuffering > 0) return 0; else return -4; } status.BUFFERFILLED = true; find_avpids(&tsBuffer, &vpid, &apid, &ac3); if (vpid == -1 || apid == -1) { if(status.NSF ) // plugin can playback file without A or V too { eDebug("[MOVIEPLAYER] both AV pids not found: vpid %d apid %d, but play.",vpid,apid); } else { eDebug("[MOVIEPLAYER] no AV pids found."); close(fd); return -5; } } status.NSF=false; status.AVPIDS_FOUND = true; if(!status.DVB) stopDVB(); Decoder::setMpegDevice(-1); // set pids Decoder::parms.vpid = vpid; Decoder::parms.apid = apid; Decoder::parms.audio_type = DECODE_AUDIO_MPEG; int ac3default = 0; eConfig::getInstance()->getKey("/elitedvb/audio/ac3default", ac3default); if (ac3 && ac3default) { if (mrl.right(3) == "vob" || mrl.left(3) == "dvd") Decoder::parms.audio_type = DECODE_AUDIO_AC3_VOB; else Decoder::parms.audio_type = DECODE_AUDIO_AC3; } eZapMain::getInstance()->hideInfobar(); usleep(100000); Decoder::SetStreamType(TYPE_PES); Decoder::Set(); #ifndef DISABLE_LCD unsigned int pos = mrl.find_last_of('/'); eZapLCD::getInstance()->lcdMain->ServiceName->setText(mrl.right(mrl.size() - pos - 1)); #endif createThreads(); status.ACTIVE = true; return 0; }