youtube-audio-stream
Version:
youtube-audio-stream
75 lines (55 loc) • 2.31 kB
Markdown
# youtube-audio-stream
[](https://github.com/feross/standard)
[](https://github.com/JamesKyburz/youtube-audio-stream/actions/workflows/ci.yml)
This module streams youtube using [ytdl](https://github.com/fent/node-ytdl) to get the youtube download stream.
To convert to audio the module [fluent-ffmpeg](https://github.com/schaermu/node-fluent-ffmpeg) is used.
You will need to have [ffmpeg](http://www.ffmpeg.org/) and the necessary encoding libraries installed, as well as in your PATH.
If you're on OSX, this can be handled easily using [Homebrew](http://brew.sh/) with `brew install ffmpeg`.
## Getting Started
1. With [npm](http://npmjs.org), run `npm install youtube-audio-stream`
2. `const stream = require('youtube-audio-stream')`
## Usage
Here is an example that:
1. queries for a video by video ID
2. Retrieves the audio via this package
3. write it to `res`
```js
const stream = require('youtube-audio-stream')
async function handleView (req, res) {
try {
for await (const chunk of stream(`http://youtube.com/watch?v=${req.params.videoId}`)) {
res.write(chunk)
}
res.end()
} catch (err) {
console.error(err)
if (!res.headersSent) {
res.writeHead(500)
res.end('internal system error')
}
}
}
```
## Node example playing directly to speaker
```js
const stream = require('youtube-audio-stream')
const url = 'http://youtube.com/watch?v=34aQNMvGEZQ'
const decoder = require('lame').Decoder
const speaker = require('speaker')
stream(url)
.pipe(decoder())
.pipe(speaker())
```
## Testing
This package comes with a simple example for testing. This can be run with the command `npm test`, which will then serve the example at `localhost:3000`. The example consists of an `<audio>` component whose source is retrieved via this package.
### Testing inside a docker container
You can test this module without the need o have [ffmeg](http://www.ffmpeg.org/) locally installed
doing it inside a container.
To build the Docker image:
```
docker build . -t youtube-audio-stream-test
```
To run the test:
```
docker run --rm -it -p 3000:3000 youtube-audio-stream-test
```