Nest Camera Video Streaming in VLC player - nest-api

I have got a public share nest camera address from my friend.
Instead of using a web browser for seeing the video, I want to use a VLC player to video stream. This way allows me to use many other features of VLC to do video analytics on the video.
How to do it?

I was able to do this in these steps:
Go to the public video share URL. It should be something like this:http://video.nest.com/live/pSgnOZ0s4t
If you use developer tool on chrome and see network traffic ....look for a URL with .m3u8 in the end... it will be something like this:https://stream-delta.dropcam.com/nexus_aac/37451e60aeac457f9800704f1662147e/playlist.m3u8
Once you get that open that file in a text editor....you will get something like this inside the file
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:BANDWIDTH=400816,CODECS="avc1.77.31,mp4a.40.2",RESOLUTION=1280x720
chunklist_w391480529.m3u8
The stream URL is then
https://stream-delta.dropcam.com/nexus_aac/37451e60aeac457f9800704f1662047e/chunklist_w391480529.m3u8
Once you have this then install livestreamer to extract video like this:
livestreamer "hls://https://stream-delta.dropcam.com/nexus_aac/37451e60aeac457f9800704f1662047e/chunklist_w391480509.m3u8" best -o nest_video.ts
This will save the file to your disk.
I used this to avoid nest aware subscription. Unfortunately, they charge so much for that service. When someone can just save the video to a disk and upload to a cheap cloud option...

I wrote a page that takes a public Nest video url and returns an HLS media .m3u8 streaming url
get media url for nest/ dropcam cameras

Related

Azure Media Services HLS Stream Url Change Resolution No Audio

Below is the manifest file get from Azure Media Services HLS Url.
The default HLS provided have Video and Audio, but when we try to change the resolution, it became only have Video but no Audio.
#EXTM3U
#EXT-X-VERSION:7
#EXT-X-SESSION-KEY:METHOD=SAMPLE-AES,KEYFORMAT="com.apple.streamingkeydelivery",KEYFORMATVERSIONS="1",URI="skd://petronastownhallmedia.keydelivery.southeastasia.media.azure.net/FairPlay/?kid=4881e415-fb2d-45e4-a8dd-505a405cf93d"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="audio_und",LANGUAGE="und",DEFAULT=YES,AUTOSELECT=YES,CHANNELS="2",URI="QualityLevels(128000)/Manifest(audio_und,format=m3u8-aapl)"
#EXT-X-STREAM-INF:BANDWIDTH=351536,RESOLUTION=340x192,CODECS="avc1.64000d,mp4a.40.5",AUDIO="audio"
QualityLevels(200000)/Manifest(video,format=m3u8-aapl)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=351536,RESOLUTION=340x192,CODECS="avc1.64000d",URI="QualityLevels(200000)/Manifest(video,format=m3u8-aapl,type=keyframes)"
#EXT-X-STREAM-INF:BANDWIDTH=709236,RESOLUTION=384x216,CODECS="avc1.640015,mp4a.40.5",AUDIO="audio"
QualityLevels(550000)/Manifest(video,format=m3u8-aapl)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=709236,RESOLUTION=384x216,CODECS="avc1.640015",URI="QualityLevels(550000)/Manifest(video,format=m3u8-aapl,type=keyframes)"
#EXT-X-STREAM-INF:BANDWIDTH=1015836,RESOLUTION=512x288,CODECS="avc1.640015,mp4a.40.5",AUDIO="audio"
QualityLevels(850000)/Manifest(video,format=m3u8-aapl)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=1015836,RESOLUTION=512x288,CODECS="avc1.640015",URI="QualityLevels(850000)/Manifest(video,format=m3u8-aapl,type=keyframes)"
#EXT-X-STREAM-INF:BANDWIDTH=1526836,RESOLUTION=704x396,CODECS="avc1.64001e,mp4a.40.5",AUDIO="audio"
QualityLevels(1350000)/Manifest(video,format=m3u8-aapl)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=1526836,RESOLUTION=704x396,CODECS="avc1.64001e",URI="QualityLevels(1350000)/Manifest(video,format=m3u8-aapl,type=keyframes)"
#EXT-X-STREAM-INF:BANDWIDTH=2395536,RESOLUTION=960x540,CODECS="avc1.64001f,mp4a.40.5",AUDIO="audio"
QualityLevels(2200000)/Manifest(video,format=m3u8-aapl)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=2395536,RESOLUTION=960x540,CODECS="avc1.64001f",URI="QualityLevels(2200000)/Manifest(video,format=m3u8-aapl,type=keyframes)"
#EXT-X-STREAM-INF:BANDWIDTH=3724136,RESOLUTION=1280x720,CODECS="avc1.64001f,mp4a.40.5",AUDIO="audio"
QualityLevels(3500000)/Manifest(video,format=m3u8-aapl)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=3724136,RESOLUTION=1280x720,CODECS="avc1.64001f",URI="QualityLevels(3500000)/Manifest(video,format=m3u8-aapl,type=keyframes)"
#EXT-X-STREAM-INF:BANDWIDTH=138976,CODECS="mp4a.40.5",AUDIO="audio"
QualityLevels(128000)/Manifest(audio_und,format=m3u8-aapl)
We have tried using / modified into following URL:
Have Audio but no video
https://xxxx/c13459a8-065e-4d86-a2aa-c95f5ededafc/365a25ee-df07-4d1f-8679-0a029fccd397.ism/QualityLevels(128000)/Manifest(audio_und,format=m3u8-aapl)
No Audio no video
https://xxxx/c13459a8-065e-4d86-a2aa-c95f5ededafc/365a25ee-df07-4d1f-8679-0a029fccd397.ism/QualityLevels(128000)/Manifest(video,audio_und,format=m3u8-aapl)
https://xxxx/c13459a8-065e-4d86-a2aa-c95f5ededafc/365a25ee-df07-4d1f-8679-0a029fccd397.ism/QualityLevels(850000)/Manifest(video,format=m3u8-aapl,audiotrack=audio)
Any idea or suggestion regarding this issue?
Thanks
What player framework are you using? Are you seeing this issue in HLS.js, Shaka player or in the Native iOS AVPlayer?
That is pointing to the audio only AAC track at 128Kbps.
The other tracks appear to include video and audio, so I'm not sure without testing those on my own. Which I can't do unless you submit a support ticket through the Azure portal and include the details on your account and streaming endpoint. I suggest that path for faster support.

How can I Record video from webcam on client with lossless frame pixels through browser?

I need to build a website which recording the person from the camera (he must allow the camera first), but I need the record frame by frame with lossless pixels.
I tried to figure this out with some options:
opencv.js - didn't figure it, it is using the browser video element, this is changing the pixels by compressions right?
ngx-webcame - I read it using capturing lossless images but not video
Now the other issue that I need to send the frames to the server?
should I save the frames on client process it on client computer and then send the result to the server?
Is there an option to send the video data frame to the server for future use?
Someone told me to build an agent that will do this actions and send the data on chunks but in that case I don't know really how to do it and I need clarification on that and some instruction on how to start build something like that.
If anyone have an example codes or anything that can direct me to the solution it will be very helpful.
I've created something similar befor using RecordRTC.
It takes advantageg of WebRTC. It works pretty straitforward. Record the video localy and upload it as a file.
https://github.com/muaz-khan/RecordRTC

Use Google Cloud Storage to Host Audio Files for Streaming but not Downloading

I have a bunch of audio files that I want people to be able to listen to. My website has an audio player so that people can listen to them. My audio player looks something like this (though this is simplified):
<audio>
<source src="https://storage.googleapis.com/my-bucket/my-file.mp3">
</audio>
The problem is that it would take almost no work for someone to just grab all of those MP3 urls and download the files.
Is there a way that I can make it so that it's only accessible for streaming, but not for downloading?
How do sites like SoundCloud handle this problem?
For example, SoundCloud lets you play people's songs. However, when I look in Firefox's Network tab I see that when playing a single song it's sending many requests to different MP3 files such as:
/media/3831430/3943025/c9OpfFFp3iYQ.128.mp3
/media/3192789/3352448/c9OpfFFp3iYQ.128.mp3
/media/3033128/3192788/c9OpfFFp3iYQ.128.mp3
Does anyone know what type of system they have going on there? Is this a common anti-piracy pattern for MP3 files that I could, perhaps, implement?
I was hit by the same problem, and I secured my storage bucket from the world by creating a middleware/pass-through service. Now this service has token validation of header and thus wont let your stream until you are authenticated. I used node pipe to achieve this, I hope this help. Here is sample code in js.
const http = require('http');
http.createServer(function(request, response) {
require('request')
.get("https://gcpmusicbucket.com/mp3/My-Song-1.mp3")
.pipe(response);
})
.listen(3000)

Record Screen's Happenings(Audio+Video)

i am new baby in WebRTC and want to implement system like video conferencing , live streaming or you can skype using WebRTC and NodeJS.
i am confused with one thing , as its our one of client's requirement , suppose on page whatever is happening it may be video conferencing say one moderator answering to many audiences one by one , so there should be one video created , which continuously recording all this stuff together and sending live stream to server to save in our database.
is this kind of stuff implementable or not?
any help please.
You can capture video through grabbing Jpeg images from a canvas element. You could also capture the entire page(if numerous videos in the same page) through grabbing the page itself through chrome.
For audio, recording remote audio with the Audio API is still an issue but locally grabbed audio is not an issue.
RecordRTC and my Modified Version for recording streams either to file or through websockets respectively.
Capture a page to a stream on how to record or screenShare an entire page of Chrome.
If you have multiple different videos not all in the same page but want to combine them all, I would suggest recording them as above and then combining and syncing them up server side(not in javascript but probably in C or C++).
If you MUST record remote audio, then I would suggest that you have those particular pages send their audio data over websockets themselves so that you can sync them up with their video and with the other sessions.

Using an audio stream URL with wpaudio or any other such script

I have bunch of audio stream URLs, like this one:
http://popplers5.bandcamp.com/download/track?enc=mp3-128&id=1269403107&stream=1
(which, by the way, are from the incredible bandcamp . com)
I need to know how to use these with audio streaming scripts like the wpaudio plugin (wpaudio . com)
Most of these plugins require a link to an actual mp3 file. As you can see, the URL above is an audio stream, not an actual mp3. How do I put the two together?
If you visit that URL, your browser should start playing the audio stream. I basically need to be able to embed the audio stream into a web page.
Thanks!
You can use mplayer:
mplayer -dumpstream url
Check this page:
http://www.mplayerhq.hu/DOCS/HTML/en/streaming.html
for more information.
If this is not a live stream thing, as it looks like for the above file, you can use a simple wget:
wget "http://popplers5.bandcamp.com/download/track?enc=mp3-128&id=1269403107&stream=1" -O outfile.mp3
Be sure to check copyright/licensing of the content before you do anything with it.
You can use WPaudio or any of the others you want, no problem. There is absolutely no difference between that stream URL you posted, and a random MP3 file served up from somewhere. At least, not from your browser's perspective.
Your browser has no idea, and does not care, how the source server gets its content. It's all HTTP, and the only thing your browser cares about is content type. Here's what that looks like:
Content-Type: audio/mpeg
Same as it would be if you tossed an MP3 up there. No biggie.
Use WPaudio, or any other web MP3 player. They all will work fine.

Resources