UPnP Seek and seekbar for Android application

五迷三道 提交于 2019-12-11 23:19:33

问题


I have been trying to implement Seek() with my UPnP Android App but have not had success.

I have my seekbar and listener but it it keeps failing when I drag the seekbar to a new position.

seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() 
{
    @Override
    public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) 
    {
        Log.i("SEEKTIME", "time:" + arg1);
        upnpService.getControlPoint().execute(new Seek(service, SeekMode.REL_TIME,   arg0.toString())
        {
            @Override
            public void success(ActionInvocation invocation)
            {
                //super.success(invocation);
                Log.i("SEEKSUCCESS", "success seek");
            }
            @Override
            public void failure(ActionInvocation arg0, UpnpResponse arg1, String arg2)
            {
                Log.i("SEEKFAIL", "fail seek");
            }
        });
    }

When I drag to a new position on the seekbar it triggers the failure method.

Any ideas???

I am using BubbleUPnP as the renderer. The device XML is listed below.

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<root xmlns="urn:schemas-upnp-org:device-1-0">
<specVersion>
    <major>1</major>
    <minor>0</minor>
</specVersion>
<device>
    <deviceType>urn:schemas-upnp-org:device:MediaRenderer:1</deviceType>
    <UDN>uuid:2797d98f-173f-fe46-0000-00002d731080</UDN>
    <friendlyName>BubbleUPnP (Nexus One)</friendlyName>
    <manufacturer>Bubblesoft</manufacturer>
    <manufacturerURL>http://forum.xda-developers.com/showthread.php?t=1118891
    </manufacturerURL>
    <modelDescription>BubbleUPnP Media Renderer</modelDescription>
    <modelName>BubbleUPnP Media Renderer</modelName>
    <modelNumber>1.4.3.1</modelNumber>
    <modelURL />
    <iconList>
        <icon>
            <mimetype>image/png</mimetype>
            <width>72</width>
            <height>72</height>
            <depth>32</depth>
            <url>/dev/2797d98f-173f-fe46-0000-00002d731080/icon.png</url>
        </icon>
    </iconList>
    <serviceList>
        <service>
            <serviceType>urn:schemas-upnp-org:service:AVTransport:1
            </serviceType>
            <serviceId>urn:upnp-org:serviceId:AVTransport</serviceId>
            <controlURL>/dev/2797d98f-173f-fe46-0000-00002d731080/svc/upnp-org/AVTransport/action
            </controlURL>
            <eventSubURL>/dev/2797d98f-173f-fe46-0000-00002d731080/svc/upnp-org/AVTransport/event
            </eventSubURL>
            <SCPDURL>/dev/2797d98f-173f-fe46-0000-00002d731080/svc/upnp-org/AVTransport/desc.xml
            </SCPDURL>
        </service>
        <service>
            <serviceType>urn:schemas-upnp-org:service:RenderingControl:1
            </serviceType>
            <serviceId>urn:upnp-org:serviceId:RenderingControl</serviceId>
            <controlURL>/dev/2797d98f-173f-fe46-0000-00002d731080/svc/upnp-org/RenderingControl/action
            </controlURL>
            <eventSubURL>/dev/2797d98f-173f-fe46-0000-00002d731080/svc/upnp-org/RenderingControl/event
            </eventSubURL>
            <SCPDURL>/dev/2797d98f-173f-fe46-0000-00002d731080/svc/upnp-org/RenderingControl/desc.xml
            </SCPDURL>
        </service>
        <service>
            <serviceType>urn:schemas-upnp-org:service:ConnectionManager:1
            </serviceType>
            <serviceId>urn:upnp-org:serviceId:ConnectionManager</serviceId>
            <controlURL>/dev/2797d98f-173f-fe46-0000-00002d731080/svc/upnp-org/ConnectionManager/action
            </controlURL>
            <eventSubURL>/dev/2797d98f-173f-fe46-0000-00002d731080/svc/upnp-org/ConnectionManager/event
            </eventSubURL>
            <SCPDURL>/dev/2797d98f-173f-fe46-0000-00002d731080/svc/upnp-org/ConnectionManager/desc.xml
            </SCPDURL>
        </service>
    </serviceList>
</device>


回答1:


I know it has been a long time to answer, but I came to this question by working with DLNA and UPNP. I decided to answer this question so that it can be useful to other STACKERS (:P). If you can use DLNA, here is the code you can use to achieve your requirement. It also supports UPNP.

It is using seekbar to show progress of currently running media. Hope you will find your requirement.

Basically, You need to use getPositionInfo() callback from upnp service. You can request this callback every specific time duration, lets say 500 millis. Here is callback:

   try {
        Service localService = this.executeDeviceItem.getDevice()
                .findService(new UDAServiceType("AVTransport"));
        if (localService != null) {
            this.upnpService.getControlPoint().execute(
                    new GetPositionInfoCallback(localService, mHandle,
                            this.activity));
        } else {
        }
    } catch (Exception localException) {
        localException.printStackTrace();
    }

You can update your seekbar as per data returned from callback. Something like this:

Bundle localBundle = paramIntent.getExtras();
String str1 = localBundle.getString("TrackDuration");
String str2 = localBundle.getString("RelTime");
int i = com.techd.tvapp.util.Utils.getRealTime(str1);
int j = Utils.getRealTime(str2);
mSeekBar.setMax(i);
mSeekBar.setProgress(j);
mTotalTime.setText(str1);
mCurrentTime.setText(str2);

To update your player using seekbar, set seekbarchange listener to this:

class PlaySeekBarListener implements SeekBar.OnSeekBarChangeListener {
        PlaySeekBarListener() {
        }

        public void onProgressChanged(SeekBar paramSeekBar, int paramInt,
                                      boolean paramBoolean) {
        }

        public void onStartTrackingTouch(SeekBar paramSeekBar) {
            // isUpdatePlaySeek = false;
        }

        public void onStopTrackingTouch(SeekBar paramSeekBar) {
            if (null != dmcControl) {
                String str = com.techd.tvapp.util.Utils.secToTime(paramSeekBar.getProgress());
                Log.i("DMC", "SeekBar time:" + str);
                dmcControl.seekBarPosition(str);
            }
        }
    }

mSeekBar = (SeekBar) findViewById(R.id.media_seekBar);
mSeekBar.setOnSeekBarChangeListener(new PlaySeekBarListener());

That's it!



来源:https://stackoverflow.com/questions/11900315/upnp-seek-and-seekbar-for-android-application

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!