One possible solution is to check if the video file is being read correctly by using the fread function to read the contents of the file into a variable and then passing that variable to the Http::attach method. Here's an example:
$vid = fopen($vidURL, 'r');
$vidContents = fread($vid, filesize($vidURL));
fclose($vid);
$headers = [
"Authorization" => "Bearer {$token}",
"Content-Type" => "application/octet-stream"
];
$vidResponse = Http::attach("{$sku}_video", $vidContents)
->withHeaders($headers)
->post($uploadURL);
This code reads the contents of the video file into the $vidContents variable using the fread function, and then passes that variable to the Http::attach method instead of the file handle. This should ensure that the entire contents of the video file are being sent to eBay's API.
Note that this solution assumes that the video file is not too large to be read into memory all at once. If the video file is very large, you may need to read it in smaller chunks using a loop and the fread function.