great work chris
Re: GStreamer 1.0 #1481
Re: GStreamer 1.0 #1482
Posted 3 July 2015 - 08:44
I investigated further.
Normally on kernels 3.2 the cdrom link is made (in function off device capacity) by udev rules
In a stb we do not have udev. p.s. yes there is a folder in etc called udev with rules in for fuse, That has nothing to do with udev self.
What's the best :
1) Making a deamon which runs after kernels devices are loaded (sr is a kernel module)
This deamon will then create a link called cdrom to sr0 in /dev map if sr0 exists ?
2) Is there a better way in a stb which lacks the normally standard used udev (in most linux distro's) ?
Re: GStreamer 1.0 #1483
Posted 3 July 2015 - 10:59
I seem to remember I once wrote and added an mdev helper which does just this.
Perhaps it got removed from the image, in one of the major image updates
Re: GStreamer 1.0 #1484
Re: GStreamer 1.0 #1485
Posted 3 July 2015 - 14:35
http://sourceforge.n...r/tree/bdpoll.c
(turns out I didn't write it)
activated by the mdev rule:
sr0 0:0 664 */usr/bin/bdpoll sr0 -c
(in /etc/mdev/mdev.conf)
Re: GStreamer 1.0 #1486
Re: GStreamer 1.0 #1487
Posted 3 July 2015 - 16:41
This is working with bdpoll.c modified to :
Now just make it better at this time it's just a brute code line whitout any protection and name 1 must become the var instead off fix name.
case CDS_DISC_OK: /* some CD-ROMs report CDS_DISK_OK even with an open * tray; if media check has the same value two times in * a row then this seems to be the case and we must not * report that there is a media in it. */ if (support_media_changed && ioctl(fd, CDROM_MEDIA_CHANGED, CDSL_CURRENT) && ioctl(fd, CDROM_MEDIA_CHANGED, CDSL_CURRENT)) { } else { got_media = true; /* * this is a bit of a hack; because we mount the cdrom, the eject button * would not work, so we would never detect 'medium removed', and * never umount the cdrom. * So we unlock the door */ ioctl(fd, CDROM_LOCKDOOR, 0); } // just as test the brute form symlink ("/dev/sr0", "/dev/cdrom"); break;
Re: GStreamer 1.0 #1488
Re: GStreamer 1.0 #1489
Posted 5 July 2015 - 18:44
It seems like that audio CD only works with libcdio 0.93 when removing cdfs from box.
With libcdio 0.82 CD does nothing at all anymore after removing cdfs in my case.
Patch cd-romlink is installed.
When upgrading libcdio in openpli-oe-core/meta-openembedded/meta-oe/recipes-multimedia/libcdio als a patch for cdtextinfo is required.
http://git.opendream...66a124f7ce94d34
When build. remove libcdio12 from box(due to not upgradable).
After that do.
opkg install gstreamer1.0-plugins-ugly-cdio --force-reinstall
This installs also libcdio16(0.93).
and
opkg install cdtextinfo --force-reinstall.
Now playing audio CD without cdfs.
Attached Files
Edited by Beeker, 5 July 2015 - 18:48.
Dreambox dm920, Uclan Ustym4Kpro, Gigablue UHD TRIO 4K and Dreambox dm8000. Wavefrontier T55 13.0|19.2|23.5|28.2 + Ziggo.
Re: GStreamer 1.0 #1490
Posted 6 July 2015 - 07:01
Well what I just did here was a fresh build with everything standard like it is now in the gst-1 git.
I just aplied the cdrom-link.patch to hotplug-e2-helper.
Box freshly reflashed and cd-rom plays fine with all cdtextinfo avbl. Cdrom is mounted using cdfs.
A note :
Just after cd insertion and You preshed ok by play cd,
cd starts playing and audio stops shortly after a whyle cd continus to play. If pause unpause or just select next song audio back.
This has nothing to to with gstreamer,mediasink,libcdio or driver . It is a basic sequencing error.
This sequencing error is also one off (most probably the one and only one) cause off all sync issues.
What is happening ?
After that the dvbmediasink's are passed from paused to playing, Enigma two is still in ready or paused state. The media starts playing fine and all in sync (audio,video,sub).
After that enigma2 passes to playing state audio stops playing.
This issue is for all media using servicemp3 by vuduo2 and dm8000 I gues it will be for all stb's.
I can solve it with an independent timer in the medisink's which just delays the effectif start off rendering till enigma2 passed to play state(+ 1 second) then no issues anymore.
I do not like such a hack with timers I'm trying to find a way so that enigma sends a event or message to all the syncs the moment it is passed from paused to playing and is really ok. Enigma2 is really ok after that it is passed from paused to playing + +- 500 ms.
Re: GStreamer 1.0 #1491
Re: GStreamer 1.0 #1492
Posted 6 July 2015 - 09:27
@pieterg @littlesat
Well extensif testing showed that indeed this to early rendering from mediasinks is the cause from all the sync issues and others .....
What I did for testing now is :
I added to servicemp3.cpp the use off a servicemp3_state file located in /tmp directory.
code added to servicemp3.cpp
switch(transition) { case GST_STATE_CHANGE_NULL_TO_READY: { sf = fopen("/tmp/servicemp3_state", "w"); if (sf) { fprintf(sf,"READY\n"); fclose(sf); } } break; /* a bit further * by ready to paused at the end */ setAC3Delay(ac3_delay); setPCMDelay(pcm_delay); if(!m_cuesheet_loaded) /* cuesheet CVR */ loadCuesheet(); sf = fopen("/tmp/servicemp3_state", "w"); if (sf) { fprintf(sf,"PAUSED\n"); fclose(sf); } } break; /* by paused to playing */ else { m_event((iPlayableService*)this, evGstreamerPlayStarted); sf = fopen("/tmp/servicemp3_state", "w"); if (sf) { fprintf(sf,"PLAYING\n"); fclose(sf); } } } break; / * by playing to paused I setted the file back to paused */ / * By service destruct I set the state file to NONE */ I added the #include <stdio.h> (file suport).
By the mediasinks audio and video , I added.
By state changing paused to playing if the servicemp3_state file is not NONE (that's to allow playing whitout enigma2 with gst_launch utility for testing)
self->playing = FALSE
self->paused = TRUE
and the dvbsink's are not launched yet (disabled the ioctl ... xxx_CONTINUE.)
By section rendering. I blocked the start off rendering until enigma2 passed from paused to playing.
Once enigma2 servicemp3 is in playing state :
the ioctl ..... xxxx_CONTINUE
self->playing = TRUE
self->paused = FALSE
All problems solved everything starts in sequence and in sync
code in sink's they are applied to video and audio same thing. This made them start exectly togheter on the correct segment.
(p.s. disregard the now code present about first paused , that must be removed since problem is there also when going to pause and back to play) that's the next step to come ..
static GstFlowReturn gst_dvbaudiosink_render(GstBaseSink *sink, GstBuffer *buffer) { GstDVBAudioSink *self = GST_DVBAUDIOSINK(sink); GstBuffer *disposebuffer = NULL; GstFlowReturn retval = GST_FLOW_OK; GstClockTime duration = GST_BUFFER_DURATION(buffer); gsize buffersize; buffersize = gst_buffer_get_size(buffer); GstClockTime timestamp = GST_BUFFER_PTS(buffer); gint i = 0; /*** wait on enigma2 to be ready before rendering after unpause **/ if (!get_servicemp3_state_none() && self->first_paused) { while (!get_servicemp3_state_playing() && i < 20000) { i++; } if (self->fd >= 0) {ioctl(self->fd, AUDIO_CONTINUE);} if(self->first_paused) {self->first_paused = FALSE;} self->paused = FALSE; self->playing = TRUE; } if (i > 0) { GST_INFO_OBJECT(self,"PLAY AFTER UNPAUSED ENIGMA cycles %d", i); i = 0; }
video sink
static GstFlowReturn gst_dvbvideosink_render(GstBaseSink *sink, GstBuffer *buffer) { GstDVBVideoSink *self = GST_DVBVIDEOSINK(sink); guint8 *pes_header; gsize pes_header_len = 0; gsize data_len; guint8 *data, *original_data; guint8 *codec_data = NULL; gsize codec_data_size = 0; gsize payload_len = 0; GstBuffer *tmpbuf = NULL; GstFlowReturn ret = GST_FLOW_OK; if (self->fd < 0) { return GST_FLOW_OK; } gint i = 0; /*** wait on enigma2 to be ready before rendering after unpause **/ if (!get_servicemp3_state_none() && self->first_paused) { while (!get_servicemp3_state_playing() && i < 20000) { i++; } if (self->fd >= 0) {ioctl(self->fd, VIDEO_CONTINUE);} if(self->first_paused) {self->first_paused = FALSE;} self->paused = FALSE; self->playing = TRUE; } if (i > 0) { GST_INFO_OBJECT(self,"PLAY AFTER UNPAUSED ENIGMA cycles %d", i); i = 0; }
The function get_servicemp3_state_xxxx() are in common now
gboolean get_servicemp3_state_none() { gboolean ret = FALSE; FILE *f; char buffer[10] = {0}; f = fopen("/tmp/servicemp3_state", "r"); if (f) { fread(buffer, sizeof(buffer), 1, f); fclose(f); } ret = !strncmp(buffer, "NONE", 4); return ret; } gboolean get_servicemp3_state_playing() { gboolean ret = FALSE; FILE *f; char buffer[10] = {0}; f = fopen("/tmp/servicemp3_state", "r"); if (f) { fread(buffer, sizeof(buffer), 1, f); fclose(f); } ret = !strncmp(buffer, "PLAYING", 7); return ret; } gboolean get_servicemp3_state_ready() { gboolean ret = FALSE; FILE *f; char buffer[10] = {0}; f = fopen("/tmp/servicemp3_state", "r"); if (f) { fread(buffer, sizeof(buffer), 1, f); fclose(f); } ret = !strncmp(buffer, "READY", 5); return ret; } gboolean get_servicemp3_state_paused() { gboolean ret = FALSE; FILE *f; char buffer[10] = {0}; f = fopen("/tmp/servicemp3_state", "r"); if (f) { fread(buffer, sizeof(buffer), 1, f); fclose(f); } ret = !strncmp(buffer, "PAUSED", 6); return ret; }
I tried to find a better way but could not find one. then the use of such servicemp3_state file would i'm shure there must be a better way then that but a can't find out how.
When You start playing now we have this :
<162420.425602> [eServiceMP3] state transition PAUSED -> PLAYING 0:11:45.478334123 23245 0x74523550 INFO dvbaudiosink gstdvbaudiosink.c:1228:gst_dvbaudiosink_render:<dvbaudiosink11> PLAY AFTER UNPAUSED ENIGMA cycles 3519 0:11:45.485103050 23245 0x74523600 INFO dvbvideosink gstdvbvideosink.c:739:gst_dvbvideosink_render:<dvbvideosink3> PLAY AFTER UNPAUSED ENIGMA cycles 3591
If rendering only starts after enigma2 is in playing state all ok. If rendering starts before problems all over.
Re: GStreamer 1.0 #1493
Posted 7 July 2015 - 15:55
Here the enigma2 patches with implementation off temporary enigma2 servicemp3 file . It's for gst-1.5.1.
Here again the complete list off patches to apply to enigma in the order.
This needs to be used togheter with :
https://github.com/c...ee/experimental
It works good on vuduo2 and dm8000
The order is first subtitle then 01 02 03
Attached Files
Edited by christophecvr, 7 July 2015 - 15:56.
Re: GStreamer 1.0 #1494
Re: GStreamer 1.0 #1495
Posted 8 July 2015 - 13:18
After all the use off the thp file was not really the best solution disrgard the previous patch 3.
It is changed again also the sink's. But now it's pretty stable .
The only issue still with first lunch off cdrom which starts playing and then stops. There must to have this ok works on MediaPlayer and also we need's better also update upgrade the libcdiso. and ...
For gst-1.5.1:
If You now apply when building image.
The patch 01 and 02 posted before (enigma). You have the chapter support by mkv media. If the media does not have chapter support then You can set manual cuts.
For cdrom support apply patch cdrom-link.patch to hotplug-e2-helper.
Further the :
https://github.com/c.../commits/master
Is now pretty stable.
Tested on vuduo2 and dm8000.
Re: GStreamer 1.0 #1496
Re: GStreamer 1.0 #1497
Posted 8 July 2015 - 16:39
First a question , did You applied the cdrom-link.patch to hotplug-e2-helper ?
Yes i did. I flash the box and the symlink was present by default.
Removing cdfs simply with opkg remove.I have done nothing with cdfs in the build-envorinment.That will be the next step.
Libcdio 093 and cdparanoia installed.
This is what i have in enigma2.bbappend.
ENIGMA2_BRANCH ?= "master"
SRC_URI = "git://git.code.sf.net/p/openpli/enigma2;protocol=git;branch=${ENIGMA2_BRANCH} \
file://0001-dvb-decoder.cpp-workaround-for-Dreamboxes-DD.patch \
file://0002-Revert-HDMI-in.patch \
file://0003-disablesubtitleshack.patch \
file://0004-enigma2-serviceMP3-cuesheet.patch \
file://0005-enigma2-serviceMP3-chapters-support.patch \
file://0006-enigma2-serviceMP3-state-file.patch "
Patch 1 and 2 are patching dvbdecoder.cpp, so that has nothing to do with it.
Yesterday i play a CD and it stops after 10-20 minutes,like you said. After 30-40 seconds audio was back but player plays the CD about 1.5-2.5 times faster.
Now i try again with latest multibox from your git and without enigma2-serviceMP3-state-file.patch.
Edited by Beeker, 8 July 2015 - 16:41.
Dreambox dm920, Uclan Ustym4Kpro, Gigablue UHD TRIO 4K and Dreambox dm8000. Wavefrontier T55 13.0|19.2|23.5|28.2 + Ziggo.
Re: GStreamer 1.0 #1498
Posted 8 July 2015 - 16:53
Note patch 01 and patch 02 have nothing to do with cd but also not with decoder.cpp those are just cue sheet and chapter support chapter supports works for mkv container movies.
There is well still somethings with MediaPLayer self. Now just launched a test to see iff cd stays playing.
Re: GStreamer 1.0 #1499
Re: GStreamer 1.0 #1500
Posted 8 July 2015 - 17:57
The trick to let play it well = :
(best have a fresh reboot after you experimented a lot.)
Then insert cd.
When menu shows up push play cd.
That above You know off course.
But once the cd is playing. (or just started to play and then stopped) navigate to track two press ok. Once the song is playing well, navigate back to track one. Then press ok cd will play nicely whitout any interuption.
Pause unpause ok and navigating trough tracks ok.
Also tagged with one or more of these keywords: gstreamer, 1.0, openpli
DVB subtitles support in eServiceMP3/GStreamerStarted by DimitarCC, 17 Oct 2024 DVB, Subtitles, GStreamer |
|
|||
Change from openvix to openpli - lose existing hdd recordings?Started by xdoktor, 30 Dec 2023 openpli, openvix, hdd, recordings |
|
|||
Having Trouble While Installing This SoftwareStarted by CharleyDavis, 27 Jun 2023 OpenPLi |
|
|||
Faild to flash or update OPENPLIStarted by dede_one, 8 Oct 2022 openpli |
|
|||
hd+ funktioneret nichtStarted by JeppeG, 29 Sep 2022 Vu+, hd+, oscam, openpli |
|
1 user(s) are reading this topic
0 members, 1 guests, 0 anonymous users