shaka-project / shaka-streamer

A simple config-file based approach to preparing streaming media, based on FFmpeg and Shaka Packager.
https://shaka-project.github.io/shaka-streamer/
Apache License 2.0
198 stars 62 forks source link

Questions: How to use the shaka-streamer? #15

Closed Romantic-LiXuefeng closed 5 years ago

Romantic-LiXuefeng commented 5 years ago

Hope to give more clear documents to guide how to use the shaka-streamer.

Forgive me for my poor English!

joeyparrish commented 5 years ago

Hi there!

Transcoding and packaging are done in a streaming pipeline. We will package content as it leaves the transcoder, rather than serializing the operations. This should be mentioned in the README.

RTMP is not yet supported as an input, but that should be easy to add. I filed #16 to track that enhancement.

  • How to config the file to support a variety of scenes?
    1. Video-On-Demand: If I have a local file, I want to package to HLS/DASH stream, which contains different bitrate streams, how to config the transcode file and packager file.

First, you need an input config file that specifies the different streams of the input file or files. For example, see config_files/input_vod_config.yaml.

Then, you need a pipeline config file that specifies the different resolutions and manifest formats you want. For example, see config_files/pipeline_vod_config.yaml.

We don't yet have support for customizing the bitrates used for each resolution, and for now, we only support standard resolutions like 4k, 2k, 1080p, 720p, 480p, 360p, 240p, and 144p. We plan to allow you to customize those things in the future through a config file (#5), but in the mean time, you can edit RESOLUTION_MAP in streamer/metadata.py.

2. LIVE:
   If  I have a rtmp live stream, I want to package to HLS/DASH stream. how to config the
   packager file.

We don't support RTMP yet, but I've filed an enhancement for this (#16) for the future. If you'd like to work on RTMP yourself, you could start by reading streamer/loop_input_node.py, which is a simple input node that runs ffmpeg and outputs to a pipe. Then look at streamer/controller_node.py to see how we hook an input node like that into the pipeline.

Forgive me for my poor English!

Not a problem at all! Your English is much better than you think.

joeyparrish commented 5 years ago

(I've labeled this a "docs" issue to improve the docs around the fact that we build a pipeline so that transcoded outputs go directly to the packager.)

joeyparrish commented 5 years ago

I've added some technical details in the README. Please also check the usage examples there and some of the sample config files we put in the repo.

Does this help answer your questions?

Romantic-LiXuefeng commented 5 years ago

@joeyparrish Thanks for your detail answer !