Two Sources on Pleora iPORT Analog-Pros

Dear Forum,

The Pleora iPORT allows a user to connect two cameras to one IP Address. By using the feature “SourceSelector”, a user can switch between the two sources.

By default when I bring up a camera using arv_gv_device_new, feature “SourceSelector” is set as “Source1”. This results in the stream being brought up to properly connect to my camera connected to the iPORT on Source1.

Does anyone else have a setup where they have two cameras to one IP Address? If so, what steps did you take to properly stream from them using Aravis?

Another question would be I noticed that when using arv_gv_device_new, it links the device_address with the port ARV_GVCP_PORT (3956). Will I run into issues if I have both streams coming from the same port then since they are both on the same IP Address?


I don’t know how it is implemented in Pleora iPort, but GigEVision standard allows to have several stream channels, whic is exposed in the ArvCamera API:

The proper sequence of operations is something like:

  • arv_camera_new
  • arv_camera_select_stream_channel (0)
  • arv_camera_create_stream
  • arv_camera_select_stream_channel (1)
  • arv_camera_create_stream

But this is a feature I have not tested by myself, as I don’t own a camera with this functionality.
Please keep us informed of the result of your tries.


Thanks for that information @Emmanuel

I’ve had some more time to work on this today. I managed to get the camera to display the first port via arv-viewer. My next attempt is trying to view only the camera on the second source. Below is my attempt modifying arv-viewer for an idea on what I will need to do inside of my Qt application.

Inside of arv_viewer_select_camera_cb, right after the check to make sure the camera isn’t NULL after the call to arv_camera_new, I call arv_camera_gv_select_stream_channel(1). However, there is no display when I rebuild and launch arv-viewer. I have asked Pleora for documentation on how they meet the GigE Standard and to see if I need to set any additional features.

Just to double-check, do I need to create a stream on both channel0 and channel1, or should in theory the idea above work?

I got a response from Pleora. They gave me their eBUS Player, from which I was able to get the GenICam XML information as well as test toggling between the channels.

From debugging their setup, I have a good idea on how to switch between the two channels now. It appears that they use GevSCSP, GevSCDA, GevSCPHostPort, and SourceSelector in addition to GevStreamChannelSelector to debug/set values.

By adapting the process from them, I was able to figure out that when I switch between the channels, all the values are being updated correctly except for GevSCDA and GevSCPHostPort. When I read back the value using arv_device_get_integer_feature_value(), I am getting a 0 returned for both. However, using arv-tool-0.4, I get the correct values returned.

I’ll keep digging into this and keep you guys posted.

Hi @jkmoonblade,

have you made any progress in this regard?

I am working with the JAI Fusion 3200D, which also has two sources coming from the same IP address.
I was able to get both streams using the Pleora SDK, but I would also like to recreate this in aravis + ROS.

I am trying the approach mentioned by @Emmanuel which opens both streams using arv_camera_create_stream but I haven’t had a lot of success so far.

Thank you in advance!

Hi @Peter

I was since pulled off the project/feature onto higher priority items at my work. We have not resolved this issue however. My notes above are the latest I was able to figure out. When you read the GevSCDA and GevSCPHostPort using arv_device_get_integer_feature_value(), do you get the correct values returned? I know when I left off I was trying to figure out why I was getting 0 returned for both.

Hi @jkmoonblade

for the JAI Fusion 3200D the GevSCDA and GevSCPHostPort are correctly updated when switching between the channels.

I managed to get the both streams working in conjunction with the camera_aravis node in ROS, but this required adding a second ArvStream in the same nodelet, instead of calling two separate nodelets.

This all still seems pretty hacky, so I haven’t created a pull request for the camera_aravis node with this yet.

But this follows @Emmanuel’s suggestion of calling:

  • arv_camera_new
  • arv_camera_select_stream_channel (0)
  • arv_camera_create_stream
  • arv_camera_select_stream_channel (1)
  • arv_camera_create_stream

I will post here again if these changes make it into the camera_aravis node.

Thank you!