Example #1
0
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));
}
Example #2
0
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;
		}
	}
}
Example #5
0
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;
}
Example #6
0
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;
}