SageTV Community  

Go Back   SageTV Community > SageTV Development and Customizations > SageTV Clients Development

Notices

SageTV Clients Development This forum is for discussions relating to SageTV Open Source Clients Development.

Reply
 
Thread Tools Search this Thread Display Modes
  #501  
Old 12-23-2020, 08:06 AM
tvmaster2's Avatar
tvmaster2 tvmaster2 is offline
SageTVaholic
 
Join Date: Jun 2005
Location: tarana
Posts: 3,929
FF and Firestick 4k - odd behaviour

Finally got around to some real-world use of the miniclient on a Firestick 4k.
Overall, really close to be being excellent, however...
I had problems with FF in a show which was a recording in progress - no matter where I tried to FF to, Miniclient would most often jump backwards to random points on the timeline, often to nearly program start.
Any thought? Was this because the recording was still in progress? Why would that make a difference if so...
__________________
Sage 9 server = Gigabyte AMD quad-core - 4 gigs - integrated ATI HD4200 chipset - SSD boot, Hitachi Deskstar show drives. HD-PVR - Colossus - Win7 32 bit. HD200/300’s networked. HDHomerun tuner. "If you've given up on Weird Al, you've given up on life" - Homer Simpson
Reply With Quote
  #502  
Old 12-23-2020, 09:31 AM
jvl711's Avatar
jvl711 jvl711 is offline
Sage Expert
 
Join Date: Jan 2004
Posts: 742
Quote:
Originally Posted by tvmaster2 View Post
Finally got around to some real-world use of the miniclient on a Firestick 4k.
Overall, really close to be being excellent, however...
I had problems with FF in a show which was a recording in progress - no matter where I tried to FF to, Miniclient would most often jump backwards to random points on the timeline, often to nearly program start.
Any thought? Was this because the recording was still in progress? Why would that make a difference if so...
Hi,

Can you confirm which version you are using.... This is something I believed that I had fixed . I felt it was much better than it had been. I almost completely rewrote how it was doing seeking.

I will tell you that the way that the Android client is setup up, it is currently using the sagetv mpeg remuxer. It relies on the remuxer to seek to the right position in the file. It could be making mistakes....
__________________
Projects I am currently maintaining
SageTV Andoid Client
Media Format Parser Plugin
JavaFFmpegLibrary

If you like the work I am doing and would like to support it you can become a Patreon member.
Reply With Quote
  #503  
Old 12-23-2020, 09:34 AM
jvl711's Avatar
jvl711 jvl711 is offline
Sage Expert
 
Join Date: Jan 2004
Posts: 742
Quote:
Originally Posted by crl View Post
It's exciting to see this client approach the level of replacing HD300! Thanks to all for their contributions. I've seen a few others upthread with same issue as mine, but without any replies.

I have 1.7.0 working with MPEG2 OTA streams on Fire Stick 4K only when Exoplayer is disabled. I also have the first MPEG2 hardware decoder (OMX.MTK.VIDEO.DECODER.MPEG2) unchecked. This works reasonably okay.

It seems most in this thread are using OpenDCT to fix the MPEG2 container in order to successfully use Exoplayer. Since I use internal an PCI capture card I don't think OpenDCT is an option for me (it didn't discover my cards when I tried.)

Is there any way to enable the same streamfix when using an internal capture card as what OpenDCT is doing?

Is there any way to disable a specific hardware codec for Exoplayer in the same way IJK allows it?

I suspect I'd be all set if either of the ideas above are possible - and others who don't have HDHRs.

Thanks!
Adding stream fix to the Android Client is on my roadmap. I plan to add a setting to the Android Client that will tell SageTV to use the SageTVTranscoder to perform a stream fix before sending to the client. This will in a sense be like realtime transcoding of the file, but with very low resource use on the server, since it will not be reencoding the content.

Josh
__________________
Projects I am currently maintaining
SageTV Andoid Client
Media Format Parser Plugin
JavaFFmpegLibrary

If you like the work I am doing and would like to support it you can become a Patreon member.
Reply With Quote
  #504  
Old 12-23-2020, 09:54 AM
tvmaster2's Avatar
tvmaster2 tvmaster2 is offline
SageTVaholic
 
Join Date: Jun 2005
Location: tarana
Posts: 3,929
Quote:
Originally Posted by jvl711 View Post
Hi,

Can you confirm which version you are using.... This is something I believed that I had fixed . I felt it was much better than it had been. I almost completely rewrote how it was doing seeking.

I will tell you that the way that the Android client is setup up, it is currently using the sagetv mpeg remuxer. It relies on the remuxer to seek to the right position in the file. It could be making mistakes....
I believe the version which Amazon auto-updated to is 1.70? Sound correct? We were watching a show last night in real time, and paused to answer a phone call, etc. When I pressed play, and then FF to get past commercials, the random jumping commenced. Windows 7, 32bit server. No wifi bandwidth issues. Happened two more times in the hour show (phone rings more often this time of year). Also lost audio sync a couple of times when trying to get back on track.
I haven’t tried a pre-recorded show yet, so I’ll get to that next
__________________
Sage 9 server = Gigabyte AMD quad-core - 4 gigs - integrated ATI HD4200 chipset - SSD boot, Hitachi Deskstar show drives. HD-PVR - Colossus - Win7 32 bit. HD200/300’s networked. HDHomerun tuner. "If you've given up on Weird Al, you've given up on life" - Homer Simpson
Reply With Quote
  #505  
Old 12-23-2020, 10:18 AM
crl crl is offline
Sage User
 
Join Date: Dec 2005
Location: Burlington, ON
Posts: 20
Quote:
Originally Posted by jvl711 View Post
Adding stream fix to the Android Client is on my roadmap. I plan to add a setting to the Android Client that will tell SageTV to use the SageTVTranscoder to perform a stream fix before sending to the client. This will in a sense be like realtime transcoding of the file, but with very low resource use on the server, since it will not be reencoding the content.
This sounds like it would do the trick!
Reply With Quote
  #506  
Old 12-23-2020, 07:15 PM
crl crl is offline
Sage User
 
Join Date: Dec 2005
Location: Burlington, ON
Posts: 20
I have a potentially fascinating observation. Using a different android tv box (s905x) I loaded v1.7.0 and played some MPEG2 TV recording, including live. On this unit they played beautifully! I assume this was exoplayer since I hadn't been into the settings to change anything.

I wanted to turn off the UI sounds and my playback became a slow, stuttering disaster! I tried a ton of things but it worked again once I cleared all app data from Android settings. Played perfectly again. Went into the settings and changed nothing - merely exited and the problem returned.

Does this make any sense?
Reply With Quote
  #507  
Old 12-27-2020, 09:41 AM
craigap craigap is offline
Sage Aficionado
 
Join Date: Jan 2006
Location: Monroe, WI
Posts: 346
I would like to thank all involved in producing this client. I recently learned of this product and decided to buy a Firestick 4K and try it out instead of trying to find another HD300 and wire an Ethernet port to a room that doesn't have one.
I seem to have the same issue using the exoplayer for my OTA recordings in MPEG. Made the settings changes to IJK and software decoding and it has been adequately functional.

Sounds like there is a transcoder in development to change my OTA recordings to a format that exoplayer will play? I also read some things about openDCT fixing this issue. I would like confirmation that this only works for network OTA tuners and not my PCIe HVR-2255s.

Also, could this client be easily uploaded to Roku as a Roku Channel? My suspicion is that there would likely be incompatible coding (not a coder at all here), but wanted to ask. Would love to see this on Roku.
Reply With Quote
  #508  
Old 12-29-2020, 01:25 PM
jvl711's Avatar
jvl711 jvl711 is offline
Sage Expert
 
Join Date: Jan 2004
Posts: 742
Quote:
Originally Posted by craigap View Post
Also, could this client be easily uploaded to Roku as a Roku Channel? My suspicion is that there would likely be incompatible coding (not a coder at all here), but wanted to ask. Would love to see this on Roku.
I am pretty sure that Roku apps ae written in a completely different programming language. Someone would need to create it from scratch.

Josh
__________________
Projects I am currently maintaining
SageTV Andoid Client
Media Format Parser Plugin
JavaFFmpegLibrary

If you like the work I am doing and would like to support it you can become a Patreon member.
Reply With Quote
  #509  
Old 12-29-2020, 03:49 PM
wayner wayner is offline
SageTVaholic
 
Join Date: Jan 2008
Location: Toronto, ON
Posts: 7,126
Quote:
Originally Posted by craigap View Post
Also, could this client be easily uploaded to Roku as a Roku Channel? My suspicion is that there would likely be incompatible coding (not a coder at all here), but wanted to ask. Would love to see this on Roku.
My understanding is that the SageTV miniclient, which is what is used on extenders, SageTV Placeshifter, and the Android app, is written in Java, just like the core of SageTV.

So it was some work, but not a complete rewrite, for stuckless to initially port the miniclient to AndroidTV. But Roku apps use something called Brightscript so it would be pretty much a total rewrite to make it work on Roku.
__________________
New Server - Sage9 on unRAID 2xHD-PVR, HDHR for OTA
Old Server - Sage7 on Win7Pro-i660CPU with 4.6TB, HD-PVR, HDHR OTA, HVR-1850 OTA
Clients - 2xHD-300, 8xHD-200 Extenders, Client+2xPlaceshifter and a WHS which acts as a backup Sage server
Reply With Quote
  #510  
Old 12-30-2020, 06:34 AM
stuckless's Avatar
stuckless stuckless is offline
SageTVaholic
 
Join Date: Oct 2007
Location: London, Ontario, Canada
Posts: 9,681
Quote:
Originally Posted by wayner View Post
My understanding is that the SageTV miniclient, which is what is used on extenders, SageTV Placeshifter, and the Android app, is written in Java, just like the core of SageTV.

So it was some work, but not a complete rewrite, for stuckless to initially port the miniclient to AndroidTV. But Roku apps use something called Brightscript so it would be pretty much a total rewrite to make it work on Roku.
The Android MiniClient is more of a rewrite than a port. I did use some of the Linux miniclient and hd300 miniclient code as a reference, but, for the most part it's a rewrite.

The "miniclient" itself is not very hard to emulate. I created one in Javascript that could render the UI and navigate it. Several years ago I did look at brightscript because I was looking to do some other work there, I think the UI rendering would be ok, but the video playback will be the challenge.

The sagetv miniclient uses 2 tcp sockets to communicate with the sagetv. 1 socket is a command socket and the other is a graphics socket. These exchange a simple binary and efficient data model, but in effect, sagetv is sending your bitmaps from the server with instructions on where to render them and scale them and or how to blend them, and you just have to apply that. When I did this for javascript I basically put a small server in the sagetv core that translated the instructions to json since that was easier to deal with.

The video playback is the real challenging part. Sagetv uses 2 video modes and neither is standard. Although the PULL model is more like a traditional video playback in that you just keep reading the stream of data and pass to the video player. The PUSH model is completely different and the video playback is managed on the server and data is pushed to the client which means data is non linear. ie, "something" on the server could cause the video to skip ahead, and when that happens a new "push" buffer is sent, but you have to watch fro this an reset the player and then sync the timeline, etc. This is why sagetv can do instant skipping, but it's also why people see timeline issues in miniclient when they seek. Brightscript's video player is likely not programmable, you just give it a URL, so this would be the hardest challenge. You also need to use a rendering engine like opengl that supports being overlaid on top of video where you can punch a hole in the UI to see the video under it. This is how PIP and overlays in general work in sagetv.

The core of the sagetv UI render engine is basically this file that reads instructions and then forwards them to the UI manager. https://github.com/OpenSageTV/sagetv...t/GFXCMD2.java
Reply With Quote
  #511  
Old 12-30-2020, 02:58 PM
randyth randyth is offline
Sage User
 
Join Date: Aug 2009
Location: Eugene, ,OR
Posts: 34
AirTV Mini

I just got an AirTV Mini free with a two-month subscription to Sling TV (I'm a seasonal Sling TV subscriber for the NBA and Tour De France). It's essentially a Google TV device streamlined for use with Sling TV. How streamlined? Well, the remote has a dedicated Sling TV button on it -- along with a Netflix button -- and hitting the Guide button always jumps to the Sling TV channel guide (grrr). But, if you can train yourself to avoid that button...

Initial testing shows the new SageTV miniclient for Android TV works really, really well on it for live TV and recordings! No changes to the default settings were necessary. I am having trouble with some imported videos, but have yet to look into this issue (I mainly use Sage TV for OTA).

I had heard that older versions of the Sling TV-branded AirTV Mini used to boot to Sling TV after you put it to sleep with the power button. Appparently they changed that behavior because, so far, it wakes up to the last-used app for me. I'm actually thinking this will replace a Fire TV Stick 4K as one of my Sage TV clients.
Reply With Quote
  #512  
Old 12-30-2020, 03:36 PM
willieb willieb is offline
Sage Advanced User
 
Join Date: Jan 2008
Location: Philadelphia
Posts: 163
MiniClient across subnets

I am just getting caught up on the changes to the miniclient over the past couple months. Thanks for all of your work, Josh.

Forgive me if this is a bit of a hijack. I'm not 100% sure if my question relates only to the miniclient or if it is really a SageTV core question.

One thing that I have asked about from time to time is how hard would it be to set a flag to not use any of the placeshifter interface and just use "regular" Sage at all times? I am not sure if your recent transcoder changes make all of this moot, but the issue I have always run into is when either connecting over a vpn or just from a different subnet within my own home network, Sage defaults to placeshifter mode and it is clunky and annoying. Sometimes it transcodes at terrible quality, but it is annoying even when it is not transcoding (I was just rereading and possibly setting the miniclient to PULL might get rid of the transcoding but I am not sure). For example, logging into placeshifter on the miniclient is difficult and it never seems to remember my credentials so that I have to log in every time. I recently segregated all of my IoT devices, including my chromecasts and Miboxes, onto their own VLAN on a different subnet and using Sage has become really cumbersome. I know I could always just suck it up and move them back, but where's the fun in that?!? So my question is, is there an easy fix for this? Is there a way to just disable placeshifter all together or are there special settings on the new miniclient I can use to get my "regular" Sage experience back across a different subnet?

Thanks for any thoughts!

Last edited by willieb; 12-30-2020 at 05:10 PM. Reason: fixing my typos as usual.
Reply With Quote
  #513  
Old 12-30-2020, 03:57 PM
KeithAbbott KeithAbbott is offline
Sage Icon
 
Join Date: Oct 2009
Location: Southeastern Michigan
Posts: 1,178
Quote:
Originally Posted by randyth View Post
I am having trouble with some imported videos, but have yet to look into this issue (I mainly use Sage TV for OTA).
I have quite a few imported DVDs ripped to .iso files, it would be great if the MiniClient could support them (like the HD300s do), but I realize it is not likely to happen.
__________________
Server: MSI Z270 SLI Plus ATX Motherboard, Intel i7-7700T CPU, 32GB Memory, unRAID 6.9.2, SageTV & OpenDCT Dockers
Tuners: 2 x SiliconDust HDHomeRun Prime Cable TV Tuners
Clients: Multiple HD300 Extenders, Multiple Fire TV Stick 4K w/MiniClient
Miscellaneous: Multiple Sony RM-VLZ620 Universal Remote Controls
Reply With Quote
  #514  
Old 12-30-2020, 04:42 PM
wayner wayner is offline
SageTVaholic
 
Join Date: Jan 2008
Location: Toronto, ON
Posts: 7,126
iso files are tricky. It is fairly easy to convert to MP4 or whatever if you don't care about some of the special features, etc of DVDs.
__________________
New Server - Sage9 on unRAID 2xHD-PVR, HDHR for OTA
Old Server - Sage7 on Win7Pro-i660CPU with 4.6TB, HD-PVR, HDHR OTA, HVR-1850 OTA
Clients - 2xHD-300, 8xHD-200 Extenders, Client+2xPlaceshifter and a WHS which acts as a backup Sage server
Reply With Quote
  #515  
Old 12-30-2020, 05:06 PM
KeithAbbott KeithAbbott is offline
Sage Icon
 
Join Date: Oct 2009
Location: Southeastern Michigan
Posts: 1,178
Quote:
Originally Posted by wayner View Post
iso files are tricky. It is fairly easy to convert to MP4 or whatever if you don't care about some of the special features, etc of DVDs.
I know it’s an option, but I also know that someone else in the family at some point will say “hey, where’s the special features for this movie?”, and then I’ll have some ‘splainin to do. Plus, I have a lot of television seasons on ripped DVD, and it seems like it would be a pita to convert those to a different format. When I converted from a Windows SageTV server to an unRAID SageTV server, I converted all of my ripped DVDs from vob format to isos, to avoid spin-up delays when switching between vob files. Maybe I should see if vob files work better in the MiniClient.
__________________
Server: MSI Z270 SLI Plus ATX Motherboard, Intel i7-7700T CPU, 32GB Memory, unRAID 6.9.2, SageTV & OpenDCT Dockers
Tuners: 2 x SiliconDust HDHomeRun Prime Cable TV Tuners
Clients: Multiple HD300 Extenders, Multiple Fire TV Stick 4K w/MiniClient
Miscellaneous: Multiple Sony RM-VLZ620 Universal Remote Controls
Reply With Quote
  #516  
Old 12-30-2020, 11:51 PM
wayner wayner is offline
SageTVaholic
 
Join Date: Jan 2008
Location: Toronto, ON
Posts: 7,126
Quote:
Originally Posted by KeithAbbott View Post
I know it’s an option, but I also know that someone else in the family at some point will say “hey, where’s the special features for this movie?”, and then I’ll have some ‘splainin to do.
That's when you launch into "You guys are spoiled. When I was young if we wanted to watch a movie we had to wait for it to come on TV and then make sure we were able to plant ourselves in front of the TV for a few hours. And you are complaining about not having the extras on a 4K UHD movie rip when you have hundreds of movies available at a few presses of the button?"
__________________
New Server - Sage9 on unRAID 2xHD-PVR, HDHR for OTA
Old Server - Sage7 on Win7Pro-i660CPU with 4.6TB, HD-PVR, HDHR OTA, HVR-1850 OTA
Clients - 2xHD-300, 8xHD-200 Extenders, Client+2xPlaceshifter and a WHS which acts as a backup Sage server
Reply With Quote
  #517  
Old 12-31-2020, 01:58 PM
jvl711's Avatar
jvl711 jvl711 is offline
Sage Expert
 
Join Date: Jan 2004
Posts: 742
Quote:
Originally Posted by willieb View Post
I am just getting caught up on the changes to the miniclient over the past couple months. Thanks for all of your work, Josh.

Forgive me if this is a bit of a hijack. I'm not 100% sure if my question relates only to the miniclient or if it is really a SageTV core question.

One thing that I have asked about from time to time is how hard would it be to set a flag to not use any of the placeshifter interface and just use "regular" Sage at all times? I am not sure if your recent transcoder changes make all of this moot, but the issue I have always run into is when either connecting over a vpn or just from a different subnet within my own home network, Sage defaults to placeshifter mode and it is clunky and annoying. Sometimes it transcodes at terrible quality, but it is annoying even when it is not transcoding (I was just rereading and possibly setting the miniclient to PULL might get rid of the transcoding but I am not sure). For example, logging into placeshifter on the miniclient is difficult and it never seems to remember my credentials so that I have to log in every time. I recently segregated all of my IoT devices, including my chromecasts and Miboxes, onto their own VLAN on a different subnet and using Sage has become really cumbersome. I know I could always just suck it up and move them back, but where's the fun in that?!? So my question is, is there an easy fix for this? Is there a way to just disable placeshifter all together or are there special settings on the new miniclient I can use to get my "regular" Sage experience back across a different subnet?

Thanks for any thoughts!
So if Sage transcodes a video or not is based on a few factors.

1. If the client has the ability to decode the media. A list of formats and codecs that the client can decode is sent to Sage when it connects. When you go to play the media, if it is not supported, than the media will be transcoded.

2. During the connection phase the server determines the bandwidth between the client and the server. If it is lower than a specified threshold, than it will transcode the media. To stop this from happening you can set the low water mark to a setting that will never be hit.

I think there may have been code that forced PUSH mode in the client if you were not on the same network. I am not 100% sure about that though. I would like to know what you are seeing if you try my latest build. It may behave a little differently now.

I have added HD transcoding using a patched Sage.jar. The quality is adjustable in the settings, and is very passable if you have the resources, so this may be moot.

Josh
__________________
Projects I am currently maintaining
SageTV Andoid Client
Media Format Parser Plugin
JavaFFmpegLibrary

If you like the work I am doing and would like to support it you can become a Patreon member.
Reply With Quote
  #518  
Old 01-01-2021, 11:07 AM
willieb willieb is offline
Sage Advanced User
 
Join Date: Jan 2008
Location: Philadelphia
Posts: 163
Thanks Josh -- just joined your patreon. I think you are my best chance to keep this Sage Saga going (still can't believe its been almost 10 years since it stopped). You are doing great work ad we are all benefitting!

I got your jar and put it on my server. I'll do a little testing with it over the weekend. I've got miboxes and new Chromecast with GoogleTVs. I guess my main question is why have the placeshifter layer at all anymore? I understand why it made sense 10 years ago to detect a different subnet and automatically switch to placeshifter / transcoding, but today, with much higher internet speeds and easy VPNs, it seems like the subnet check is a bad criteria for determining whether automatic placeshifting/transcoding should be done. Seems like a flag on the client would be better (and maybe that is what you've done with your list of codecs that the device can do).

Placeshifter mode has the annoying log in, which is tough to navigate. I also think it turns animations off completely (and I know it is dumb but I kind of like them). I also had to set up my Gemstone separately for the placeshifter. My thought was just that if I can connect to the server, despite being on a separate subnet, it would be better if I could just tell Sage to treat me just like it would if I were connected directly on the network. I sometimes use a travel router with wireguard and with that I can even take an HD300 on the road (although the chromecasts are better because they do so much more). I suspect core sage changes would be necessary here but I can't imagine it would be hard to just have a flag to use placeshifter mode or not. Just feels like an additional layer of complexity that is largely obsolete.

Of course I might be barking up the wrong tree or just plain doing it wrong so feel free to tell me and I can try whatever folks suggest.

Thanks again!
Reply With Quote
  #519  
Old 01-01-2021, 02:08 PM
KeithAbbott KeithAbbott is offline
Sage Icon
 
Join Date: Oct 2009
Location: Southeastern Michigan
Posts: 1,178
I'm using version 1.7.0 of the MiniClient on a FireTV Stick 4K, and I have the "Use Native Resolution" option checked in the settings. However, when I check channels that should be 720p (Fox, ESPN, ABC, etc.) they are all showing up as 1080p when I press the info button on the TV remote. Am I missing a setting somewhere? I would prefer if the MiniClient display the native resolution of the channel being viewed, rather than sending it as 1080p all of the time. Any suggestions?
__________________
Server: MSI Z270 SLI Plus ATX Motherboard, Intel i7-7700T CPU, 32GB Memory, unRAID 6.9.2, SageTV & OpenDCT Dockers
Tuners: 2 x SiliconDust HDHomeRun Prime Cable TV Tuners
Clients: Multiple HD300 Extenders, Multiple Fire TV Stick 4K w/MiniClient
Miscellaneous: Multiple Sony RM-VLZ620 Universal Remote Controls
Reply With Quote
  #520  
Old 01-01-2021, 03:44 PM
willieb willieb is offline
Sage Advanced User
 
Join Date: Jan 2008
Location: Philadelphia
Posts: 163
ExoPlayer Error

I am also getting a lot of these ExoPlayer errors today on recorded shows. Don't remember seeing this before. Any thoughts anyone?
Attached Images
File Type: jpg IMG-1090.jpg (141.4 KB, 56 views)
Reply With Quote
Reply


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
SageTV MiniClient for Android Indiegogo Campaign (Thanks) stuckless SageTV Clients Development 13 10-27-2020 01:49 PM
Android MiniClient 1.4.3 stuckless SageTV Clients Development 20 03-25-2019 10:32 AM
Android MiniClient 1.2.9 stuckless SageTV Clients Development 53 04-16-2018 07:30 AM
Android Miniclient and UK TV rickgillyon SageTV Clients Development 6 12-01-2016 05:58 PM
Android Miniclient on Mi Box Crashing SageTV Server v9 mackb SageTV Clients Development 9 11-27-2016 07:28 PM


All times are GMT -6. The time now is 08:34 PM.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2021, vBulletin Solutions Inc.
Copyright 2003-2005 SageTV, LLC. All rights reserved.