Closed PePeHa closed 7 years ago
Muammar, any idea ?
Muammar, any idea ?
Can you try using the git repository with the --debug
flag to see if your ffmpeg is detected, please?.
Hi Muammar. I installed the git, flask and everything. running in node.js it works, but again not working in ffmpeg. as per your request, i ran the following command in Terminal
python mkchromecast.py --encoder-backend ffmpeg --debug
and this was response ....
('ALSA device name:', None) ('Google Cast name:', None) ('backends: ', ['node', 'ffmpeg']) The segment time has to be an integer number Set to default of 2 seconds ('ALSA device name:', None) ('Google Cast name:', None) ('backends: ', ['node', 'ffmpeg']) The segment time has to be an integer number Set to default of 2 seconds USER =pepeha PATH =./bin:./nodejs/bin:/Users/pepeha/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/X11/bin:/usr/games:/opt/local/bin:/opt/local/sbin:/Users/pepeha/.rvm/gems/ruby-2.4.0/bin:/Users/pepeha/.rvm/gems/ruby-2.4.0@global/bin:/Users/pepeha/.rvm/rubies/ruby-2.4.0/bin:/opt/local/bin:/opt/local/sbin:/Users/pepeha/.npm-packages/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Users/pepeha/.rvm/bin mkchromecast v0.3.7 :::cast::: sockets method 192.168.1.8 Starting local streaming server [Done] (':::audio::: chunk_size: ', 1024) Selected backend: ffmpeg Selected audio codec: mp3 Default bitrate used: 192k Default sample rate used: 44100Hz :::audio::: command ['ffmpeg', '-f', 'avfoundation', '-audio_device_index', '0', '-i', '', '-acodec', 'libmp3lame', '-f', 'segment', '-segment_time', '2', '-f', 'mp3', '-ac', '2', '-ar', '44100', '-b:a', '192k', 'pipe:'] PID of main process: 9514 PID of streaming process: 9517
self.cclist [u'ChromecastAudio1000'] if len(self.cclist) != 0 and self.select_cc == False:
Index Friendly name ===== ============= 0 ChromecastAudio1000
We will cast to first device in the list above!
ChromecastAudio1000
def get_cc(self): Exception in thread zeroconf-Engine: Traceback (most recent call last): File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 801, in __bootstrap_inner self.run() File "/usr/local/lib/python2.7/site-packages/zeroconf.py", line 946, in run rr, wr, er = select.select(rs, [], [], self.timeout) error: (9, 'Bad file descriptor')
Information about ChromecastAudio1000
DeviceStatus(friendly_name=u'ChromecastAudio1000', model_name=u'Chromecast Audio', manufacturer=u'Google Inc.', api_version=(1, 0), uuid=UUID('01006qc7-402b-bgcd-14g8-111190e7aef4'), cast_type='audio')
Status of device ChromecastAudio1000
CastStatus(is_active_input=None, is_stand_by=None, volume_level=0.5199999809265137, volume_muted=False, app_id=None, display_name=None, namespaces=[], session_id=None, transport_id=None, status_text='')
Switching to soundflower... [Done] def play_cast(self): The IP of ChromecastAudio1000 is: 192.168.1.5 Your local IP is: 192.168.1.8
The media type string used is: audio/mpeg
Cast media controller status
CastStatus(is_active_input=None, is_stand_by=None, volume_level=0.5199999809265137, volume_muted=False, app_id=u'CC1ED846', display_name=u'Default Media Receiver', namespaces=[u'urn:x-cast:com.google.cast.broadcast', u'urn:x-cast:com.google.cast.media'], session_id=u'5e1601ef-12af-1e35-1e60-0a1a7fd3defd', transport_id=u'5e1601ef-12af-1e35-1e60-0a1a7fd3defd', status_text=u'Ready To Cast')
Ctrl-C to kill the application at any time
ffmpeg version 3.2.2 Copyright (c) 2000-2016 the FFmpeg developers built with Apple LLVM version 8.0.0 (clang-800.0.42.1) configuration: --prefix=/usr/local/Cellar/ffmpeg/3.2.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-opencl --disable-lzma --enable-nonfree --enable-vda libavutil 55. 34.100 / 55. 34.100 libavcodec 57. 64.101 / 57. 64.101 libavformat 57. 56.100 / 57. 56.100 libavdevice 57. 1.100 / 57. 1.100 libavfilter 6. 65.100 / 6. 65.100 libavresample 3. 1. 0 / 3. 1. 0 libswscale 4. 2.100 / 4. 2.100 libswresample 2. 3.100 / 2. 3.100 libpostproc 54. 1.100 / 54. 1.100
any update on this issue, Muammar ?
any update on this issue, Muammar ?
I have been unable to reproduce this. As of writing this comment, I am casting from macOS with ffmpeg:
Last login: Sun Jan 29 12:46:27 on ttys003
muammar@zarathustra ~/github/mkchromecast [devel]
± % uname -a !10118
Darwin zarathustra.local 16.4.0 Darwin Kernel Version 16.4.0: Thu Dec 22 22:53:21 PST 2016; root:xnu-3789.41.3~3/RELEASE_X86_64 x86_64
muammar@zarathustra ~/github/mkchromecast [devel]
± % python3 mkchromecast.py --encoder-backend ffmpeg -c ogg -s !10116
The segment time has to be an integer number
Set to default of 2 seconds
The segment time has to be an integer number
Set to default of 2 seconds
mkchromecast v0.3.7
Starting local streaming server
[Done]
Selected backend: ffmpeg
Selected audio codec: ogg
Default bitrate used: 192k
Default sample rate used: 44100Hz
PID of main process: 8156
PID of streaming process: 8162
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
List of Google Cast devices available in your network:
------------------------------------------------------
Index Friendly name
===== =============
0 Monsi TV
1 CCA
Please, select the Index of the Google Cast device that you want to use:
0
Casting to: Monsi TV
Information about Monsi TV
DeviceStatus(friendly_name='Monsi TV', model_name='Chromecast', manufacturer='Google Inc.', api_version=(1, 0), uuid=UUID('0b7cfbc6-ce97-dd97-b478-dd14604e5fed'), cast_type='cast')
Status of device Monsi TV
CastStatus(is_active_input=False, is_stand_by=True, volume_level=1.0, volume_muted=False, app_id='E8C28D3C', display_name='Backdrop', namespaces=['urn:x-cast:com.google.cast.sse'], session_id='603535ee-5f37-4098-93ef-88e92e90b929', transport_id='603535ee-5f37-4098-93ef-88e92e90b929', status_text='')
Switching to soundflower...
[Done]
The IP of Monsi TV is: 192.168.1.173
Your local IP is: 192.168.1.154
The media type string used is: audio/ogg
Cast media controller status
CastStatus(is_active_input=False, is_stand_by=True, volume_level=1.0, volume_muted=False, app_id='CC1AD845', display_name='Default Media Receiver', namespaces=['urn:x-cast:com.google.cast.broadcast', 'urn:x-cast:com.google.cast.media'], session_id='375c425a-86ca-4ddc-a338-5403b49babdd', transport_id='375c425a-86ca-4ddc-a338-5403b49babdd', status_text='Ready To Cast')
Ctrl-C to kill the application at any time
192.168.1.173 - - [29/Jan/2017 12:44:26] "GET /stream HTTP/1.1" 200 -
You can try the following:
Can you let me know if it works?.
dear Muammar. i re-installed Soundflower, nice clean re-install, proper removal, reboot and reinstall. however, still no sound via ffmpeg. unfortunately, i can't get it to work on MacOS Sierra, neither from Terminal nor from .dmg package.
dear Muammar. i re-installed Soundflower, nice clean re-install, proper removal, reboot and reinstall. however, still no sound via ffmpeg. unfortunately, i can't get it to work on MacOS Sierra, neither from Terminal nor from .dmg package.
Arrg. I have no idea at this point on what's going on in your case. When using node, you have no problem, isn't it?. Can you confirm that?.
thnks Muammar. dont worry about it, thnx for your help. yes, when using node.js, it works. only with ffmpeg no sound coming out at all. i was interested in ffmpeg, to stream hi-res audio to chromecast (Tidal, 44.1kHz / 88.2kHhz and 96kHz, both 16-bit as well as 24-bit, using wav or flac via ffmpeg/Soundflower)
PS - i would even be more than happy to pay for a working solution to get Mac Desktop audio to Chromecast Audio at high sampling-rates and bit-depth. all commercial solutions dont offer this for Mac (e.g. Airfoil only does 16-bit / 44.1kHz, as it is Airplay-protocol-based). as Tidal is now offering MQA file-streaming, there is obviously a large market for streaming un-folded MQA at 24-bit / 44.1 / 48 / 88.2 and 96 kHz to Chromecast, given Tidal only offers Chromecast support on mobile apps, and there it only goes up to 16-bit / 44.1kHz. so there is huge market for people looking to stream software-unfolded MQA from Tidal desktop App to Chromecast Audio. unfortunately there is nothing available to do this, right now.
thnks Muammar. dont worry about it, thnx for your help. yes, when using node.js, it works. only with ffmpeg no sound coming out at all. i was interested in ffmpeg, to stream hi-res audio to chromecast (Tidal, 44.1kHz / 88.2kHhz and 96kHz, both 16-bit as well as 24-bit, using wav or flac via ffmpeg/Soundflower)
Yes, I understand. Try the following:
Start casting using ffmpeg.
Open a new terminal and execute this:
ffmpeg -f avfoundation -audio_device_index 0 -i " " -f wav output.wav
output.wav
. Is it recording/playing anything?.i get an error: "[AVFoundation input device @ 0x7ff8c740f5c0] Video device not found"
ffmpeg -f avfoundation -list_devices true -i ""
what's the list you get when executing the above?
ffmpeg -f avfoundation -list_devices true -i "" ffmpeg version 3.2.2 Copyright (c) 2000-2016 the FFmpeg developers built with Apple LLVM version 8.0.0 (clang-800.0.42.1) configuration: --prefix=/usr/local/Cellar/ffmpeg/3.2.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-opencl --disable-lzma --enable-nonfree --enable-vda libavutil 55. 34.100 / 55. 34.100 libavcodec 57. 64.101 / 57. 64.101 libavformat 57. 56.100 / 57. 56.100 libavdevice 57. 1.100 / 57. 1.100 libavfilter 6. 65.100 / 6. 65.100 libavresample 3. 1. 0 / 3. 1. 0 libswscale 4. 2.100 / 4. 2.100 libswresample 2. 3.100 / 2. 3.100 libpostproc 54. 1.100 / 54. 1.100 [AVFoundation input device @ 0x7ff46bc00dc0] AVFoundation video devices: [AVFoundation input device @ 0x7ff46bc00dc0] [0] FaceTime HD-camera (beeldscherm) [AVFoundation input device @ 0x7ff46bc00dc0] [1] FaceTime-camera (ingebouwd) [AVFoundation input device @ 0x7ff46bc00dc0] [2] Capture screen 0 [AVFoundation input device @ 0x7ff46bc00dc0] AVFoundation audio devices: [AVFoundation input device @ 0x7ff46bc00dc0] [0] Soundflower (64ch) [AVFoundation input device @ 0x7ff46bc00dc0] [1] Built-in Microphone [AVFoundation input device @ 0x7ff46bc00dc0] [2] Soundflower (2ch) [AVFoundation input device @ 0x7ff46bc00dc0] [3] Display Audio : Input/output error
I think in your case the command should be:
ffmpeg -f avfoundation -audio_device_index 2 -i " " -f wav output.wav
Because we want to capture this:
[AVFoundation input device @ 0x7ff46bc00dc0] [2] Soundflower (2ch)
Try again and tell me if it records something.
i still get the same error - "[AVFoundation input device @ 0x7fe58fd02560] Video device not found : Input/output error"
also noticed that the device address is changing everytime i run an ffmpeg command, but maybe that's normal, i dont know
Let's do things in a cleaner way. Without casting anything (just play anything you like in your browser or media player), open the sound preferences of your macbook pro and change input
and output
to soundflower (2ch):
http://cdn.osxdaily.com/wp-content/uploads/2013/02/redirect-system-audio-input-from-soundflower.jpg
Then, list your devices with:
ffmpeg -f avfoundation -list_devices true -i ""
And use the index of your soundflower here:
ffmpeg -f avfoundation -audio_device_index MY_SOUNDFLOWER_INDEX -i " " -f wav output.wav
I am suspecting that the default device I have set in the code is not working for you. What we need is to confirm that it is the case, so then, I can implement a solution for your problem.
i tried, but still not working ! maybe also important to note, is that there is more than 1 device with same index !!! the Facetime camera's and (i don't know what this is, but still) Capture Screen, also have indices from 0 to 2, so maybe choosing 2 (as i did per your request), point to whatever Capture screen is, and not to Soundflower ?
[AVFoundation input device @ 0x7f87e5500300] AVFoundation video devices: [AVFoundation input device @ 0x7f87e5500300] [0] FaceTime HD-camera (beeldscherm) [AVFoundation input device @ 0x7f87e5500300] [1] FaceTime-camera (ingebouwd) [AVFoundation input device @ 0x7f87e5500300] [2] Capture screen 0 [AVFoundation input device @ 0x7f87e5500300] AVFoundation audio devices: [AVFoundation input device @ 0x7f87e5500300] [0] Soundflower (64ch) [AVFoundation input device @ 0x7f87e5500300] [1] Built-in Microphone [AVFoundation input device @ 0x7f87e5500300] [2] Soundflower (2ch) [AVFoundation input device @ 0x7f87e5500300] [3] Display Audio
i tried, but still not working ! maybe also important to note, is that there is more than 1 device with same index !!! the Facetime camera's and (i don't know what this is, but still) Capture Screen, also have indices from 0 to 2, so maybe choosing 2 (as i did per your request), point to whatever Capture screen is, and not to Soundflower ?
Yes, I think you are correct.
Another way would be this one:
ffmpeg -f avfoundation -i ":MY_SOUNDFLOWER_INDEX " -f wav output.wav
Note that there is an appended :
that's to tell ffmpeg that we want to set the index of audio devices and nothing for the video. Hopefully that works?.
yes, it worked ! so what is that capture screen device that i have at same device number as soundflower, namely both on 2 ? i don't know what it is ! :-) and how do we get mkchromecast to work properly now we know this ?
Holy s***! finally. I think this is very easy to fix. The thing is that the order of your devices is different. I may just try setting the device explicitly using its name?.
Can you try this and tell me if it records something?
ffmpeg -f avfoundation -i ":Soundflower (2ch)" -f wav output.wav
yes, it worked also with referring to soundflower explicitly.
yes, it worked also with referring to soundflower explicitly.
Thank you for your patience and feedback. Let me change the code in devel
and I will write you back in some minutes.
ok, great teamwork, Muammar !!! thanks so much, i appreciate your work !
ok, great teamwork, Muammar !!! thanks so much, i appreciate your work !
Thank you :). Hopefully this commit https://github.com/muammar/mkchromecast/commit/23fab813f0d4cecffbfac10db648505b7da945b9 solves the problem. Can you test it, please?. You need to checkout in devel
and pull the changes.
ok, how do i install the development version of mkchromecast from terminal ?
If I remember correctly, you had installed git and you had also downloaded the git repository. So you will need to get inside the mkchromecast
directory you cloned and do the following:
git pull
git fetch
git checkout devel
If you deleted the repository you cloned, you can from scratch do the following:
git clone https://github.com/muammar/mkchromecast
cd mkchromecast
git fetch
git checkout devel
ok, didn't delete directory :-) so did first 3 command in directory, and tried
1) python mkchromecast.py : check, worked (as previously, using node); 2) python mkchromecast.py --encoder-backend ffmpeg : still not working, unfortunately
Can you do a git log
and copy/paste the first commit you see in the list, please?.
hmmm, yeah, your change is showing up, so git install devel went ok, see below. so there must be something else going on ...
commit 23fab813f0d4cecffbfac10db648505b7da945b9 Author: Muammar El Khatib muammarelkhatib@gmail.com Date: Sun Jan 29 17:45:39 2017 -0500
This commit is related to #40. Device names are not ordered the same in
different systems.
@PePeHa I wasn't at home. And you are right, it wasn't working. Now I have tested it. Do a git pull
and try again. The error was this -> https://github.com/muammar/mkchromecast/commit/e3c3627824802b17ff562db6999db73b651d35a6.
thanks Muammar ! i had gone to sleep :-) but just tried, and it works ! great work, Muammar ! just one more thing i wondered - does mkchromecast make some cache file somewhere on disk before sending out to chromecast, and where can i find it ? also, i wondered if ffmpeg is using lossless encoding from soundflower input, so is it using libx264 and outputting into lossless wav or flac stream / file ? if there is no intermediate caching file made, how can i check the details around the encoding procedure, bit-depth, sample rates etc. from terminal ? again, thanks Muammar, this is a great project. streaming Tidal un-folded MQA from desktop to Chromecast via mkchromecast !
thanks Muammar ! i had gone to sleep :-) but just tried, and it works ! great work, Muammar !
I am glad to know it works for you now!.
just one more thing i wondered - does mkchromecast make some cache file somewhere on disk before sending out to chromecast, and where can i find it ?
No cache file here. Everything is piped to the webserver.
also, i wondered if ffmpeg is using lossless encoding from soundflower input, so is it using libx264 and outputting into lossless wav or flac stream / file ? if there is no intermediate caching file made, how can i check the details around the encoding procedure, bit-depth, sample rates etc. from terminal ? again,
What I do is to take the redirected input from soundflower (note that soundflower has a maximum of 48khz sample rate https://github.com/muammar/mkchromecast/wiki/Sample-rates). If I understand correctly soundflower maxium bit-depth is 32bits?. You can check more details in ffmpeg if you pass the --debug
flag.
thanks Muammar, this is a great project. streaming Tidal un-folded MQA from desktop to Chromecast via mkchromecast !
You are welcome, and thanks for reporting and making better the app. I am interested on understanding if the bit-depth is sent as I think.
i don't really understand - if i go to audio/midi settings, i can choose the sample rates for SoundFlower (both input as well as output) to 44.1 / 48 / 88.2 / 96 / 176.4 and 192 kHz, always at 32-bit. so that leaves 3 questions:
1) how is it that your soundflower install only goes up to 48kHz, where mine goes up to 192kHz ?; 2) if you say, you take the redirected soundflower input, you mean no re-sampling & re-encoding is applied, you just take the raw stream and send that out to whatever one chooses, e.g. wav, flac etc. ? 3) in relation to (2), what happens specifically if Tidal sends out 88.2kHz to SoundFlower , as i can currently not choose 88.2kHz in the mkchromecast Tray - ffmpeg settings. is it re-sampled to 96kHz en re-encoded, and if so, by which method ?
lastly, i checked, launching with --debug parameter, and found something interesting (see full output below); here a summary:
Input #0, avfoundation, from ':Soundflower (2ch)': Duration: N/A, start: 72753.491780, bitrate: 5644 kb/s Stream #0:0: Audio: pcm_f32le, 88200 Hz, stereo, flt, 5644 kb/s [flac @ 0x7fad6284a000] encoding as 24 bits-per-sample Output #0, flac, to 'pipe:': Metadata: encoder : Lavf57.56.100 Stream #0:0: Audio: flac, 96000 Hz, stereo, s32 (24 bit), 128 kb/s Metadata: encoder : Lavc57.64.101 flac Stream mapping: Stream #0:0 -> #0:0 (pcm_f32le (native) -> flac (native)) Press [q] to stop, [?] for help 192.168.1.5 - - [30/Jan/2017 18:59:50] "GET /stream HTTP/1.1" 200 - size= 74299kB time=00:03:47.78 bitrate=2672.1kbits/s speed= 1x
PS - i checked before, using JRiver to send audio to Chromecast Audio, and maximum quality it accepts without troubles is 192kHz sampling rate at 24-bit depth, both PCM / wav as well as flac files
i don't really understand - if i go to audio/midi settings, i can choose the sample rates for SoundFlower (both input as well as output) to 44.1 / 48 / 88.2 / 96 / 176.4 and 192 kHz, always at 32-bit. so that leaves 3 questions:
how is it that your soundflower install only goes up to 48kHz, where mine goes up to 192kHz ?;
I have just checked again. I read elsewhere that last year the chromecast audio was resampling everything to 48khz. Now I believe it is not the case. That's why I was just talking about 48khz. I have just checked my laptop and I have the same options as you.
if you say, you take the redirected soundflower input, you mean no re-sampling & re-encoding is applied, you just take the raw stream and send that out to whatever one chooses, e.g. wav, flac etc. ?
Yes, look at this line of code the command is taking the Soundflower input and then the resampling (or whatever is set) is done in the output part.
in relation to (2), what happens specifically if Tidal sends out 88.2kHz to SoundFlower , as i can currently not choose 88.2kHz in the mkchromecast Tray - ffmpeg settings. is it re-sampled to 96kHz en re-encoded, and if so, by which method ?
Yes, that's what would happen. In such a case, I believe I should add 88.2kHz as an option. The method is the method implemented in ffmpeg. I have no idea about those details to be honest.
lastly, i checked, launching with --debug parameter, and found something interesting (see full output below); here a summary:
output bit-depth seems to be 24-bit, which is all we need, so this seems fine;
input stream sample rate is 88.2kHz, streaming at 5644 kb/s;
output streams at only approximately half of the input bit-rate (but looking more specifically, it also mentions 128kbps and the used codec) - i also looked at Network Activity via Activity Monitor, and it show Python sending out to network effectively only approx. 300KB / second to the Chromecast Audio;
capturing soundflower & encoding and chromecasting does not seem to be lossless ! maybe mkchromecast is not choosing to use the proper encoder for lossless capture; i would really like to get lossless capture and transfer to Chromecast Audio working :-)
I think that the output of the ffmpeg has to be modified to accomplish this. If you don't mind to test the changes I can try to fix it :).
I think that WAV code is fine? Problem seems to be only with flac. I agree with you on that one.
ffmpeg version 3.2.2 Copyright (c) 2000-2016 the FFmpeg developers
built with Apple LLVM version 8.0.0 (clang-800.0.42.1)
configuration: --prefix=/usr/local/Cellar/ffmpeg/3.2.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-opencl --disable-lzma --enable-nonfree --enable-vda
libavutil 55. 34.100 / 55. 34.100
libavcodec 57. 64.101 / 57. 64.101
libavformat 57. 56.100 / 57. 56.100
libavdevice 57. 1.100 / 57. 1.100
libavfilter 6. 65.100 / 6. 65.100
libavresample 3. 1. 0 / 3. 1. 0
libswscale 4. 2.100 / 4. 2.100
libswresample 2. 3.100 / 2. 3.100
libpostproc 54. 1.100 / 54. 1.100
Input #0, avfoundation, from ':Soundflower (2ch)':
Duration: N/A, start: 1427.036615, bitrate: 6144 kb/s
Stream #0:0: Audio: pcm_f32le, 96000 Hz, stereo, flt, 6144 kb/s
Output #0, wav, to 'pipe:':
Metadata:
ISFT : Lavf57.56.100
Stream #0:0: Audio: pcm_s24le ([1][0][0][0] / 0x0001), 96000 Hz, stereo, s32, 4608 kb/s
Metadata:
encoder : Lavc57.64.101 pcm_s24le
Stream mapping:
Stream #0:0 -> #0:0 (pcm_f32le (native) -> pcm_s24le (native))
I have modified the FLAC part to support the bitrate:
python3 mkchromecast.py --debug --encoder-backend ffmpeg -c flac -b 3000 --sample-rate 96000
Now the output looks like:
Ctrl-C to kill the application at any time
ffmpeg version 3.2.2 Copyright (c) 2000-2016 the FFmpeg developers
built with Apple LLVM version 8.0.0 (clang-800.0.42.1)
configuration: --prefix=/usr/local/Cellar/ffmpeg/3.2.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-opencl --disable-lzma --enable-nonfree --enable-vda
libavutil 55. 34.100 / 55. 34.100
libavcodec 57. 64.101 / 57. 64.101
libavformat 57. 56.100 / 57. 56.100
libavdevice 57. 1.100 / 57. 1.100
libavfilter 6. 65.100 / 6. 65.100
libavresample 3. 1. 0 / 3. 1. 0
libswscale 4. 2.100 / 4. 2.100
libswresample 2. 3.100 / 2. 3.100
libpostproc 54. 1.100 / 54. 1.100
Input #0, avfoundation, from ':Soundflower (2ch)':
Duration: N/A, start: 4566.855990, bitrate: 6144 kb/s
Stream #0:0: Audio: pcm_f32le, 96000 Hz, stereo, flt, 6144 kb/s
[flac @ 0x7f86b0067a00] encoding as 24 bits-per-sample
Output #0, flac, to 'pipe:':
Metadata:
encoder : Lavf57.56.100
Stream #0:0: Audio: flac, 96000 Hz, stereo, s32 (24 bit), 3000 kb/s
Metadata:
encoder : Lavc57.64.101 flac
Stream mapping:
Stream #0:0 -> #0:0 (pcm_f32le (native) -> flac (native))
Let me know if this is ok.
Great work Muammar - both wav as well as flac encoding now streaming at full bit-rate !
such incredible value-for-money - streaming un-folded MQA at 24-bit / 88.2 / 96kHz with Chromecast Audio for $35 dollar in combination with mkchromecast !
@PePeHa Nice! I will close this bug report. But before doing so, do you think I should add 88.2kHz
to the system tray options?
if it's not too much extra work for you, i would add 88.2 as well as 176.4kHz. better would even be, if mkchromecast could automatically take over the Soundflower sample rate settings. in that latter case, Tidal could exclusively force the appropriate sample rate upon Soundflower, depending on the source file (so to 44.1, 48, 88.2 or 96kHz) and mkchromecast would automatically switch its ffmpeg sample rate accordingly. at the moment, i noticed that if sample rate is changed in Soundflower after mkchromecast is launched (so mkchromecast already running), for example when changing to a track with a different sample rate, i have to re-connect Chromecast from the mkchromecast panel or otherwise there is no sound any longer. would be nice if mkchromecast could do this automatically. if it would be easy to implement, that would be a very nice feature, but if it is too complex, i can live with this limitation and am more than happy with the way it works currently !!! thanks for all this great work Muammar ! i say, Nobel Prize for Music Chromecast Audio for you !!!
On Wed, Feb 01, 2017 at 07:16:55AM -0800, PePeHa wrote:
if it's not too much extra work for you, i would add 88.2 as well as 176.4kHz.
That wouldn't be too much trouble to be added in the system tray.
better would even be, if mkchromecast could automatically take over the Soundflower sample rate settings. in that latter case, Tidal could exclusively force the appropriate sample rate upon Soundflower, depending on the source file (so to 44.1, 48, 88.2 or 96kHz) and mkchromecast would automatically switch its ffmpeg sample rate accordingly. at the moment, i noticed that if sample rate is changed in Soundflower after mkchromecast is launched (so mkchromecast already running), for example when changing to a track with a different sample rate, i have to re-connect Chromecast from the mkchromecast panel or otherwise there is no sound any longer.
I think that that would require more work to be done. At least detecting the sample rate from source and change ffmpeg accordingly could be more possible.
would be nice if mkchromecast could do this automatically. if it would be easy to implement, that would be a very nice feature, but if it is too complex, i can live with this limitation and am more than happy with the way it works currently !!! thanks for all this great work Muammar ! i say, Nobel Prize for Music Chromecast Audio for you !!!
Thank you for noticing all of these issues with the codecs, it makes the application better. You are more than welcome, and I LOL'ed a lot when reading about being the Nobel prize for the CC audio.
glad you LOL'd - Stockholm is waiting for you ;-)
i installed from your mac .dmg image, latest version 0.3.6, and in node, playback seems to be working (up to 320kbps, in mp3 - 500kbps mp3 not working either by the way), but if i select ffmpeg (and yes, i have installed full package with options as you described, via brew), MKCHROMECAST is not working, regardless of settings, mp3, flac, wav, anything - just no sound at all. what could be wrong ?
PS - i am using MacOS Sierra