<div dir="ltr"><div>Dear VLC Developers,</div><div><br></div><div>I may have come upon a regression in the MPEG TS handling.</div><div><br></div><div>I am trying to convert my DVDs to regular MPEG files, without transcoding.</div><div><br></div><div>I use a command like this:</div><div>cvlc -v --no-random --no-loop --no-repeat "dvdsimple:///dev/dvd#1-1" --sout="#std{access=file{no-overwrite},mux=ps,dst=output.mpg}" --sout-all vlc://quit</div><div><br></div><div><div></div></div><div>When I convert them to MPEG PS, they work. But the subtitle and audio track languages are not shown anymore (just track 1, track 2, etc.), they must be guessed during playback. Even though the three letter language codes are present in the output file.<br></div><div><br></div><div>So I also tried to convert them to MPEG TS. Now the track languages are visible, BUT the subtitles do not work. They are not even recognized as DVD subtitles anymore, they are recognized as SCTE-27 subtitles.</div><div><div><br></div><div>According to this wiki page, even streaming should work: <a href="https://wiki.videolan.org/Documentation:Streaming_HowTo/Stream_a_DVD/" target="_blank">https://wiki.videolan.org/Documentation:Streaming_HowTo/Stream_a_DVD/</a></div><div>Needless to say, I get the same result with UDP streaming as with streaming to an output file.<br></div><div></div></div><div><br></div><div>I also get errors during playback, seemingly when the subtitles should be displayed:</div><div>[00007f02800011a0] ts demux error: libdvbpsi error (misc PSI): Bad CRC_32 table 0xb2 !!!<br></div><div><br></div><div>I did some digging in the source code.</div><div>The muxer sets the i_stream_type to 0x82 for DVD subtitles.</div><div><a href="https://github.com/videolan/vlc/blob/3.0.18/modules/mux/mpeg/tables.c#L853" target="_blank">https://github.com/videolan/vlc/blob/3.0.18/modules/mux/mpeg/tables.c#L853</a></div><div></div><div><br></div><div></div><div></div><div>    case VLC_CODEC_SPU:<br>        ts->i_stream_type = 0x82;<br>        pes->i_stream_id = 0xbd;<br>        break;</div><div><br></div><div>This has been introduced in version 0.6.2 as I can see, for both the muxer and the demuxer.<br></div><div><a href="https://github.com/videolan/vlc/blob/0.6.2/modules/mux/mpeg/ts.c#L469" target="_blank">https://github.com/videolan/vlc/blob/0.6.2/modules/mux/mpeg/ts.c#L469</a></div><div><a href="https://github.com/videolan/vlc/blob/0.6.2/modules/demux/mpeg/ts.c#L1342" target="_blank">https://github.com/videolan/vlc/blob/0.6.2/modules/demux/mpeg/ts.c#L1342</a></div><div><br></div><div>When SCTE-27 subtitles were introduced in 2.1.0, the DVD subtitle handling was dropped:</div><div>
<div><a href="https://github.com/videolan/vlc/commit/7e3dcdd09c2fac64f00acb360d30f24c74894609#diff-06fb03bad25d92afcf0a4e5f1a78a8f80b4766cd2541e82a27a62318ddd5935eL2174" target="_blank">https://github.com/videolan/vlc/commit/7e3dcdd09c2fac64f00acb360d30f24c74894609#diff-06fb03bad25d92afcf0a4e5f1a78a8f80b4766cd2541e82a27a62318ddd5935eL2174</a></div><div><br></div><div>Was this intentional? It was simply just deleted and replaced with SCTE-27, which obviously does not work with DVD subtitles. Removing this capability is not mentioned in the changelog OR the commit message.<br></div><div><br></div><div>So I installed the 2.0.8 version, and the subtitles worked, just as they should. Subtitles work even when streaming from a new version of VLC (3.0.20 from debian), and playback with 2.0.8, which confirms that the muxing code is intact. With playback on 2.1.0 however, subtitles do not work anymore.</div><div><br></div><div>So I grabbed the code, and tried to revert this change.</div><div>@@ -1440,10 +1440,7 @@<br>         es_format_Change( fmt, AUDIO_ES, VLC_CODEC_A52 );<br>         break;<br>     case 0x82:  /* SCTE-27 (sub) */<br>-        es_format_Change( fmt, SPU_ES, VLC_CODEC_SCTE_27 );<br>-        *p_datatype = TS_TRANSPORT_SECTIONS;<br>-        ts_sections_processor_Add( p_demux, &p_pes->p_sections_proc, 0xC6, 0x00,<br>-                                   SCTE27_Section_Callback, p_pes );<br>+        es_format_Change( fmt, SPU_ES, VLC_CODEC_SPU );<br>         break;<br>     case 0x84:  /* SDDS (audio) */<br>         es_format_Change( fmt, AUDIO_ES, VLC_CODEC_SDDS );<br></div><div><br></div><div>This fixed the issue. But this obviously breaks SCTE27 subtitles.</div><div><br></div><div>There is also the 0x92 stream type for DVD subtitles, but is seems to be some legacy VLS code. I tried to change the ts mux code to 0x92, but it did not work. I was able to fix that too, but that is an other story.<br></div><div></div><div><br></div><div>I understand that this may not be a widely used feature, it has been broken for 10+ years and no one complained... I do not even know if it is part of the MPEG standard, or just VLC specific, but it would be great, if it worked.<br></div><div><br></div><div>Best regards,</div><div>Csaba Buday<br></div>

</div></div>