Discussion:
Please help: BDA IP Sink problem: How to decode IP packets from MPEG-2
(too old to reply)
a***@gmail.com
2008-07-28 14:47:53 UTC
Permalink
Hi All,

I am new to BDA filters and GraphEdit. I have run into a wall trying
to get IP datacasting using MPE over DVB-S, and therefore would
greatly appreciate any advice/help/info. **I am willing to consider
consultation terms for anyone with the right expertise.**
Also, my apologies for posting this in multiple forums that might be
cross-linked; I am yet to receive an answer to my previous posts and
hence decided to post here.

This is what I am trying to achieve:

Creation of Directshow filter graph to decode and render A/V streams
and IP data received using a proprietary PCI express tuner card. The
tuner card receives MPEG-2 transport streams over DVB-S. The MPEG-2 TS
can carry A/V streams or encapsulated IP data (MPE) or a combination
of both.

In windows, I am using a GraphEdit filter graph to connect the various
components to tune and receive, demux and decode the signal. I have
BDA tuner and capture filters for the tuner card. With Microsoft's in-
built BDA MPEG-2 demux and NVIDIA's Purevideo decoder, I am able to
decode and display the audio/video streams successfully.

However, the encapsulated IP data over the same channel is not
received correctly. Microsoft TV/Video Connection status shows 0
packets sent/received. I am using Wireshark to sniff packets on the
Microsoft TV/Video Connection interface, and Wireshark is unable to
find any UDP multicast data stream (which is what the IP data
contains). Wireshark finds *intermittent* UDP packets belonging to the
multicast streams, but says the packets have checksum errors.

In GraphEdit, we using BDA MPE Filter and BDA IP Sink for the IP data.
The MPE Filter is connected to output pin 5 of the MPEG-2 Demux, with
appropriate PID mapping. I have set the data type for the PID mapping
to "Transport Packet (complete)". Setting to any other type stops even
the few checksum error packets that Wireshark can detect.

Btw, the A/V and IP data reception works fine in Linux. I also used
some Windows XP MPEG-2 capture tools (trial software downloaded from
various websites) to capture the MPEG-2 transport stream and read it
-- the softwares all show that the IP multicast streams are contained
in the MPEG-2 TS.

I have been trying to figure this out for several days now, with
little success. If anyone can help with advise on what additional
steps I need, or where I am going wrong, or even with links to
solutions if already existing, I would greatly appreciate that.


Thanks in advance.
a***@gmail.com
2008-08-04 14:09:27 UTC
Permalink
Post by a***@gmail.com
Hi All,
I am new to BDA filters and GraphEdit. I have run into a wall trying
to get IP datacasting using MPE over DVB-S, and therefore would
greatly appreciate any advice/help/info. **I am willing to consider
consultation terms for anyone with the right expertise.**
Also, my apologies for posting this in multiple forums that might be
cross-linked; I am yet to receive an answer to my previous posts and
hence decided to post here.
Creation of Directshow filter graph to decode and render A/V streams
and IP data received using a proprietary PCI express tuner card. The
tuner card receives MPEG-2 transport streams over DVB-S. The MPEG-2 TS
can carry A/V streams or encapsulated IP data (MPE) or a combination
of both.
In windows, I am using a GraphEdit filter graph to connect the various
components to tune and receive, demux and decode the signal. I have
BDA tuner and capture filters for the tuner card. With Microsoft's in-
built BDA MPEG-2 demux and NVIDIA's Purevideo decoder, I am able to
decode and display the audio/video streams successfully.
However, the encapsulated IP data over the same channel is not
received correctly. Microsoft TV/Video Connection status shows 0
packets sent/received. I am using Wireshark to sniff packets on the
Microsoft TV/Video Connection interface, and Wireshark is unable to
find any UDP multicast data stream (which is what the IP data
contains). Wireshark finds *intermittent* UDP packets belonging to the
multicast streams, but says the packets have checksum errors.
In GraphEdit, we using BDA MPE Filter and BDA IP Sink for the IP data.
The MPE Filter is connected to output pin 5 of the MPEG-2 Demux, with
appropriate PID mapping. I have set the data type for the PID mapping
to "Transport Packet (complete)". Setting to any other type stops even
the few checksum error packets that Wireshark can detect.
Btw, the A/V and IP data reception works fine in Linux. I also used
some Windows XP MPEG-2 capture tools (trial software downloaded from
various websites) to capture the MPEG-2 transport stream and read it
-- the softwares all show that the IP multicast streams are contained
in the MPEG-2 TS.
I have been trying to figure this out for several days now, with
little success. If anyone can help with advise on what additional
steps I need, or where I am going wrong, or even with links to
solutions if already existing, I would greatly appreciate that.
Thanks in advance.
I finally solved the problem. Several (subtle) steps were needed
together:

1. The filter graph:
Microsoft Network Provider -> Custom PCI Card Tuner Filter -> Custom
PCI Card MPEG-2 TS Capture Filter -> MPEG-2 TS Demux -> MPEG-2 TIF
(Pin 1), MPEG-2 Sections and Tables (Pin 2), Sample Infinite Tee
Filter (Pin 5).
From Sample Tee Filter -> BDA MPE -> BDA IP Sink

2. Pin 5 of Demux above has type DVB MPE.

3. PID mappings:
0x0000, 0x0010, 0x0011, 0x0012: MPEG PSI Sections - pin 1
0x0400 (unicast PID), 0x0901, 0x0902, 0x0905, 0x0906 (multicast stream
PIDs): MPEG PSI Sections - pin 5
(The PID mappings will vary depending on what PIDs are streaming data
in your setup.)

4. In Windows XP registry, add new entry (using regedit from the
command prompt) for Microsoft TV/Video interface:
HKEY_LOCAL_MACHINE -> SYSTEM -> Services -> Tcpip -> Parameters
Name: IGMPVersion Type: REG_DWORD Value: 3 (hex)
This is to set the default IGMP version to 2, which is needed for the
multicast streams in my setup

5. Restart Windows

6. Disable the (default) LAN Ethernet interface (else all IGMP joins
seem to go to this interface, even though IGMP should be going to ALL
active interfaces)

7. Load the filter graph and run it. This will start the Microsoft TV/
Video interface.

8. Open Windows Media Player (or any other streaming media player) and
try to play one of the multicast streams (this requires a .nsc file if
the multicast stream is generated by Windows Media Server). This will
trigger IGMP joins on the (only) active interface, the Microsoft TV/
Video interface,
which is receiving the MPE sections now.

9. If everything is set correctly, you should see streaming video in
WMP, and/or see the the multicast packets in Wireshark/Ethereal. You
can also
see unicast packets in Wireshark, if you have some suitable unicast
stream too with correct PID mapping above. I have a ping running
"correctly".

Hope this helps anyone else who tries this.

Loading...