Làm cách nào để truyền phát âm thanh GNU / Linux của tôi sang các thiết bị Android qua WI-FI?


39

Tôi muốn truyền phát âm thanh của mình qua mạng (Wi-Fi) đến các thiết bị Android của mình. Tôi không tìm kiếm một giải pháp phát nhạc / video, nhưng tôi sẽ truyền bất kỳ đầu ra âm thanh nào của máy tính để bàn GNU / Linux sang Android của tôi hoạt động như một tai nghe bluetooth.

Máy tính để bàn GNU / Linux của tôi là Debian Wheezy và âm thanh được cung cấp bởi pulseaudio.

Tôi đã thử mô-đun raop của Pulseaudio (và kích hoạt nó trên paprefs) + ứng dụng AirBuddle của Android, nhưng âm thanh không được truyền phát (pulseaudio seens kết nối với AirBuddle, nhưng một số phần mềm không được kết nối, trong một số phần mềm bị lỗi phần mềm khác âm thanh bị kẹt).

Câu trả lời:


27

Có một giải pháp rất đơn giản vì PulseAudio đã có tất cả các công cụ cần thiết.

  1. Nhận tên thiết bị nguồn của bạn bằng lệnh pactl list | grep Name
  2. Tạo tập lệnh sau có tên pashare:

    #!/bin/sh
    case "$1" in
      start)
        $0 stop 
        pactl load-module module-simple-protocol-tcp rate=48000 format=s16le channels=2 source=<source_name_here> record=true port=8000
        ;;
      stop)
        pactl unload-module `pactl list | grep tcp -B1 | grep M | sed 's/[^0-9]//g'`
        ;;
      *)
        echo "Usage: $0 start|stop" >&2
        ;;
    esac
    
  3. Thực hiện một số kiểm tra và chuẩn bị (để cho phép thực thi tập lệnh và kiểm tra xem cổng đã mở thành công chưa):

    chmod 755 pashare
    ./pashare start
    netstat -nlt | grep 8000 
    telnet 127.0.0.1 8000
    
  4. Tải xuống và cài đặt PulseDroid.apk

  5. Khởi chạy ứng dụng trên điện thoại của bạn; đặt địa chỉ IP cho máy tính của bạn và cổng tới 8000.

PS Bạn cũng có thể kiểm tra trang Wiki này để biết thông tin chung về phát trực tuyến mạng Pulseaudio và trang Wiki này về phát trực tuyến RTP. Đừng mong đợi quá nhiều từ việc truyền phát âm thanh thô qua WiFi; phải mất rất nhiều băng thông. Ngay cả với bộ định tuyến / AP không dây cao cấp với tín hiệu mạnh mẽ, tôi vẫn không thể nhận được nhiều hơn âm thanh phát ra từ nó. Đặt cược tốt nhất của bạn có lẽ là thiết lập một máy chủ phương tiện thích hợp (như Rygel, hoạt động tốt với Pulseaudio) để chuyển mã âm thanh thô sang thứ gì đó như MP3 và truyền phát thay thế.


7
Điều này cũng hoạt động hoàn hảo với Ứng dụng Android này: Trình phát giao thức đơn giản play.google.com/store/apps/, Lưu ý rằng điều này mặc định là Rate = 44100, do đó bạn có thể muốn sử dụng nó.
Jannes

1
Chỉ cần làm rõ: đầu ra của pactl list sources short tốt hơn là tìm số lượng của tham số nguồn.
wolfmanx

4
sử dụng pactl list | grep "Monitor Source"cho thấy nhiều nguồn có liên quan hơn cho tôi.
markroxor

18

Bạn có thể sử dụng VLC để phân phát luồng MP3 đầu ra của pulseaudio qua HTTP.
Ưu điểm chính là bạn không cần cài đặt bất kỳ phần mềm đặc biệt nào trên thiết bị từ xa, trình duyệt web (hoặc trình phát nhạc) là tất cả những gì bạn cần để phát trực tuyến. Nhược điểm là chỉ có âm thanh, độ trễ vài giây khiến video trở nên vô dụng

  1. Tìm tên đầu ra của pulseaudio với:

    pactl list | grep "Monitor Source" 
    
  2. Bắt đầu máy chủ http VLC, thay thế XXXX bằng tên đầu ra của bạn:

    cvlc -vvv pulse://XXXX --sout '#transcode{acodec=mp3,ab=128,channels=2}:standard{access=http,dst=0.0.0.0:8888/pc.mp3}'
    
  3. Nếu cần, hãy tìm địa chỉ IP cục bộ của bạn với ifconfig

  4. Trên thiết bị từ xa của bạn, hãy trỏ trình duyệt (hoặc ứng dụng truyền phát âm thanh) tới:

    http://your.local.ip.address:8888/pc.mp3
    

Lưu ý: Luồng không bị ảnh hưởng bởi âm lượng được đặt trên máy chủ, trừ khi bạn tắt tiếng hoàn toàn. Nếu cần, bạn có thể giữ mức chỉ một chút nhỏ trên 0 để chỉ nghe thiết bị từ xa.


Hai bước đầu tiên được kết hợp thành một bởi polynomial_donut :

cvlc -vvv pulse://$(pactl list | grep "Monitor Source" | awk '{print $3}') --sout '#transcode{acodec=mp3,ab=128,channels=2}:standard{access=http,dst=0.0.0.0:8888/pc.mp3}'

1
tuyệt vời! Có độ trễ 3 giây nhưng tôi hài lòng với bản hack nhỏ này cho đến khi tôi tìm thấy sợi cáp chết tiệt đó. Có lẽ tôi sẽ phải mua một cái khác ...
Slabo

@Slabo điểm tốt, vì một số lý do tôi đã giả định rằng OP chỉ muốn truyền phát nhạc. Chỉnh sửa câu trả lời của tôi
wilks

2
Một lớp lót thay vì hai dòng đầu tiên: cvlc -vvv pulse://$(pactl list | grep "Monitor Source" | awk '{print $3}') --sout '#transcode{acodec=mp3,ab=128,channels=2}:standard{access=http,dst=0.0.0.0:8888/pc.mp3}'
polynomial_donut

Luồng IS bị ảnh hưởng trực tiếp bởi cài đặt âm lượng cho tôi. Tôi chỉ cần cắm tai nghe để ngăn âm thanh phát ra từ máy tính xách tay.
Rolf

Nhân tiện, làm thế nào để tôi ngăn chặn độ trễ kéo dài như 1/2 giờ?
Rolf

9

Để truyền phát âm thanh qua wifi đến điện thoại Android của bạn, bạn cần cài đặt phần mềm máy chủ, gửi âm thanh, trên PC và phần mềm máy khách trên thiết bị Android. Các tùy chọn có sẵn là

Loa không dây WiFi Audio

Chạy Ứng dụng WiFi Audio Android và Bấm bắt đầu, bạn sẽ thấy địa chỉ IP của thiết bị di động ở phía dưới sau khi chạy ứng dụng Windows / Linux và đặt địa chỉ IP của thiết bị di động vào trường địa chỉ IP, sau đó nhấn start trên ứng dụng PC. Bây giờ tất cả âm thanh phát ra từ PC sẽ được gửi đến thiết bị di động và bạn sẽ nghe thấy âm thanh trên thiết bị di động.
Tải về

Âm thanh

Truyền không dây bất kỳ nhạc hoặc âm thanh nào từ PC sang điện thoại Android, máy tính bảng hoặc PC khác
Trang chủ của bạn cũng xem

Các liên kết hữu ích khác
XBMC android SE


SoundWire chậm 1-2 giây
Gaurav Gupta

@gauravgupta Không chậm trễ nếu bạn chọn kích thước bộ đệm nhỏ hơn. Cũng cố gắng sử dụng nén. Điều này làm việc cho tôi rất tốt.
raacer

bạn có thể đặt liên kết tải xuống ứng dụng PC của WiFi Audio tại đây không?
vâng

1
Loa không dây WiFi Audio đã bị xóa khỏi github và phiên bản được biên dịch trong các diễn đàn được người dùng báo cáo là phần mềm độc hại. Hãy cẩn thận! Soundwire cũng có vẻ tanh, từ cách phân phối.
Genom

0

Đối với những người sử dụng Soundwire và gửi wifi từ máy tính xách tay hoặc PC của bạn, sử dụng ifconfig HÃY ĐỂ BẠN SỬ DỤNG ĐỊA CHỈ IP ĐÚNG. Điều này vẫn hoạt động cho đến ngày nay nhưng hầu hết các bản phân phối Linux cần có bộ chuyển đổi wifi thứ hai để gửi wifi và bạn phải sử dụng cái mà Android của bạn được kết nối TO. không phải là một mạng internet nhận. Người gửi nó ra.

tức là -> Nếu bạn đang sử dụng bộ chuyển đổi wifi "A" để kết nối với internet và "B" để gửi wifi từ "A", sau đó kết nối SoundWire trên Android với "B" KHÔNG "A".

SoundWire sẽ KHÔNG kết nối hoặc truyền phát nếu bạn kết nối với bộ chuyển đổi không gửi wifi, vì vậy hãy nhập địa chỉ IP của bạn vào (các) ứng dụng Andoroid của bạn, sử dụng lệnh terminal ifconfig tương ứng.

Đúng là có độ trễ nhưng ứng dụng này, SoundWire, là hệ thống "đa kết nối với ip và quên" đơn giản nhất hiện có. Không có menu điên để đi qua. Và có, nó chấp nhận nhiều hơn một kết nối. Tôi đã sử dụng 2 ngày khác. Nó nối thêm số lượng thiết bị được kết nối với nó trong cửa sổ chính trên thiết bị gửi đường truyền.

Sử dụng cá nhân này như một hệ thống radio wifi nhiều phòng / khoảng cách ngắn tại địa điểm của tôi cho đến ngày nay.

Thưởng thức.


-4

Ồ, cái này cũ rồi ...

Dù sao, sử dụng VLC. GUI đẹp tất cả các cách.

  • Bật VLC trên máy tính để bàn của bạn.
  • Nhấn Stream, chọn tệp (thêm bao nhiêu tệp bạn muốn), nhấn luồng.
  • 'Tiếp theo' nếu tất cả đều đúng.
  • Đối với Điểm đến mới, chọn "http" (hoặc bất cứ điều gì bạn muốn sử dụng). Chọn Hiển thị cục bộ nếu bạn muốn phát trên máy bạn cũng đang phát trực tuyến. Một vài cuộc đối thoại tiếp theo là tất cả tự giải thích.

Bật VLC trên thiết bị Android của bạn. Nhấn biểu tượng bên cạnh nút tìm kiếm (mũi tên chỉ vào dấu chấm). gõ http://<IP ADDRESS O OF THE MACHINE RUNNING VLC>:8080/cho tôi đây làhttp://xxx.ca:8080/

Đã thử nghiệm và làm việc. Bây giờ, người ta có thể làm điều này vào thời cổ đại của ngày 9 tháng 6 không? Có thể, nhưng tôi quá lười để kiểm tra nhật ký xác nhận của VLC;)


3
Anh ấy không tìm kiếm một giải pháp truyền phát nhạc / video.
Cristian Ciupitu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.