Cách truyền phát video từ camera Raspberry Pi và xem trực tiếp


93

Tôi mới sử dụng Raspberry Pi và thậm chí mới với máy ảnh Raspberry Pi. Tôi đã thấy rất nhiều hướng dẫn trực tuyến cho máy ảnh Raspberry Pi nhưng chưa tìm thấy trên đó cho phép tôi phát trực tiếp từ máy ảnh Raspberry Pi như bạn có thể với một webcam (sử dụng SimpleCV hoặc OpenCV). Hy vọng ai đó có thể chỉ cho tôi đi đúng hướng.


bạn đã thử mjpgstreamer chưa? Shell tôi đăng giải pháp?
jaromrax

3
Những người đang tìm kiếm giải pháp độ trễ bằng không nên kiểm tra raspberrypi.stackexchange.com/a/32521/30681
igaurav

Nếu bạn có ssh và mpv: ssh raspberrypi raspivid -o - -t 0 -fps 25 -w 640 -h 360 | mpv - --speed 2 --fps 25("- tốc độ 2" giữ cho nó không bị trễ quá nhiều).
Biến thái

Câu trả lời:


81

Giải pháp được Diego đề xuất là tốt, ngoại trừ việc nó khá chậm và có độ trễ video rất lớn kể từ khi vlc phát lại luồng của raspvid. Kể từ 12/2013, có trình điều khiển v4l2 chính thức có sẵn: http://www.ics.com/blog/raspberry-pi-camera-module#.VJFhbyvF-b8 Điều này làm cho việc phát lại lỗi thời được đề cập. Đơn giản chỉ cần tải mô-đun và sử dụng nó:

sudo modprobe bcm2835-v4l2
cvlc v4l2:///dev/video0 --v4l2-width 1920 --v4l2-height 1080 --v4l2-chroma h264 --sout '#standard{access=http,mux=ts,dst=0.0.0.0:12345}'

Điều này tạo ra một luồng http tại cổng 12345, bạn cũng có thể sử dụng các định dạng khác, như rtcp từ câu trả lời của Diego. Đọc thêm về nó ở đây: https://web.archive.org/web/20151012014829/http://www.videolan.org:80/doc/streaming-howto/en/ch03.html


2
Trong câu trả lời này , bạn nên thêm :demux=264vào cvlc vì luồng là RAW h264 và bạn cần đặt bộ giải mã : cvlc v4l2:///dev/video0 --v4l2-width 1920 --v4l2-height 1080 --v4l2-chroma h264 --sout '#standard{access=http,mux=ts,dst=0.0.0.0:12345}' :demux=264. Chẳng hạn, có thể xem luồng trong VLC cho Android.
Jaime M.

8
Trong liên kết được cung cấp, thay vì autoreconf -vfibây giờ bạn nên sử dụng./bootstrap.sh
JuJoDi

1
Có cách nào cho phép tôi truyền phát video và lưu video trên thẻ SD RPi không?
Hoặc Weinberger

4
Các videolan.org/doc/streaming-howto/en/ch03.html liên kết là chết.
Kal

4
Tôi nghĩ rằng có thể đáng lưu ý / xác nhận rằng phương pháp này không hoạt động trong một môi trường không đầu. Tôi đang gặp lỗi, một trong số đó nói về X11
Nick

41

Có một số tùy chọn bạn có thể chọn giữa. Trong công việc của mình, chúng tôi đang sử dụng VLC để truyền phát video được quay bởi Raspberry Pi Camera từ các phòng máy chủ của chúng tôi đến văn phòng. Một nhược điểm của điều này là có khoảng 5 giây chậm trễ và tôi chưa tìm được giải pháp cho vấn đề này. Sau đây là thiết lập của chúng tôi:

  1. Đã cài đặt và cập nhật raspbian và đảm bảo máy ảnh của bạn được bật (bạn kích hoạt tính năng này bằng cách chạy sudo raspi-config và chọn Bật Camera)

    sudo apt-get update
    sudo apt-get upgrade
    
  2. Cài đặt vlc

    sudo apt-get install vlc
    
  3. Tạo một tập lệnh để bắt đầu luồng với nội dung sau hoặc chạy lệnh (bạn không thể làm gì khác nếu bạn chỉ chạy lệnh).

    sudo nano myscript.sh
    raspivid -o - -t 0 -hf -w 640 -h 360 -fps 25 | cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554}' :demux=h264
    
  4. Làm cho kịch bản có thể chạy được

    sudo chmod +x myscript.sh
    
  5. Nếu bạn muốn bắt đầu truyền phát tự động, bạn phải thêm tập lệnh vào crontab. Để thực hiện công việc này, tôi đã phải tạo một tập lệnh khác được chạy bởi cron (OBS! VLC không thể chạy dưới dạng sudo vì vậy hãy chắc chắn rằng bạn đang ở đúng cron). sudo nano myscript2.sh:

    #!/bin/bash
    /path/to/myscript.sh
    

    Sau đó:

    sudo chmod +x myscript2.sh
    crontab -e
    @reboot /path/to/myscript2.sh
    
  6. Để xem băng video, hãy mở VLC trên máy tính trên cùng mạng với raspberry pi bạn đang sử dụng để phát trực tuyến. Nhấn Media -> Mở Mạng và dán phần sau vào trường:

    rtsp://[IP].[TO].[THE].[PI]:8554/
    

Nếu bạn không quan tâm đến FPS (khung hình mỗi giây) và không muốn bất kỳ độ trễ nào, bạn có thể sử dụng MJPEG. Bạn có thể đọc thêm về điều này TẠI ĐÂY

Xem wiki NÀY về Mô-đun Camera Raspberry Pi. Hy vọng bạn tìm thấy những gì bạn đang tìm kiếm.


Bất cứ ý tưởng tại sao tôi sẽ nhận được sau đây trên VLC trên Windows? Đầu vào của bạn không thể mở được: VLC không thể mở MRL 'rtsp: //192.168.1.78: 8554'. Kiểm tra nhật ký để biết chi tiết. Phía Pi có vẻ ổn - không có lỗi và dường như phản ứng với máy khách được kết nối?
monojohnny 7/03/2015

@monojohnny Là mâm xôi pi phát trực tuyến? Kiểm tra xem video có thực sự hoạt động hay không bằng cách cắm vào màn hình. Nếu video đang hoạt động, bạn sẽ thấy luồng trên màn hình được cắm vào pi mâm xôi.
Diego

@monojohnny Cảm ơn vì Diego viết lên ... hoạt động hoàn hảo ngay lần thử đầu tiên! monojohnny ... bạn phải đặt dấu "/" nếu không vlc phàn nàn. Hãy thử điều này: rtsp: //192.168.1.78: 8554 /
Sujay Phadke

Cảm ơn @Diego điều này đã làm việc rất tốt cho tôi nhưng làm cách nào để thoát khỏi luồng của tôi?
Từ chối

Tôi có cùng một vấn đề trên windows và tôi không thể truyền phát video từ pi của mình. cho tôi thấy video phát trực tiếp từ camera pi trên màn hình được kết nối với pi nhưng không thông qua VLC được cài đặt trên windows 10 pc của tôi.
Mostafa

23

Tôi đã thử một số tùy chọn. Tuy nhiên, tôi đã tìm thấy kết quả tốt nhất khi sử dụng dự án đó: RPi-Cam-Web-Interface từ cộng đồng eLinux

luồng có độ trễ gần như bằng không.

chúc may mắn :)


4
Những người tìm kiếm độ trễ bằng không, kiểm tra điều này cho chắc chắn. Đạo cụ cho @ user2998302. Tôi không thể tin, trong một năm, điều này không có sự ủng hộ (thừa nhận) về điều này.
igaurav

Mặc dù đây là một thiết lập nhanh chóng và dễ dàng, phần mềm không được tối ưu hóa, do đó, trong khi độ trễ thấp (không có độ trễ bằng 0), giao diện rất trò chuyện và sử dụng một số chu kỳ CPU bổ sung. Không thành vấn đề nếu bạn không chạy bất cứ thứ gì khác, nhưng có thể là nếu bạn, đặc biệt là trên Pi 1.
Nick

Điều này thật tuyệt!
Hamza Ouaghad

Truyền phát video trực tuyến nhanh nhất từ ​​trước đến nay trong số những video tôi đã thử nghiệm (cũng là trình điều khiển v4l2 bản địa được truyền qua vlc), độ trễ gần như bằng không. Không có điểm nào phàn nàn về tối ưu hóa trong khi mọi tài nguyên trên internet liên quan đến vấn đề này sẽ không mang lại cho bạn bất kỳ kết quả nào tốt hơn ứng dụng này.
Gabber

woah, tôi phải thừa nhận điều này!
L.Trabacchin

18

Cách dễ nhất mà tôi đã tìm thấy, để có được một đoạn video trực tiếp từ một quả mâm xôi không đầu, với một máy ảnh pi mâm xôi.

Giải pháp này hoạt động ngay lập tức, không cần cài đặt phần mềm bổ sung trên PI.

Trên PI:

raspivid -t 0 -l -o tcp://0.0.0.0:3333

Trên máy tính, người ta có thể phát trực tuyến với VLC:

vlc tcp/h264://192.168.66.154:3333

(giả sử 192.168.66.154 là địa chỉ IP của PI)


Chào mừng đến với Raspberry Pi! Chúng tôi thường không khuyến khích sao chép nguyên văn câu trả lời của bạn từ câu hỏi này sang câu hỏi khác khi bạn đạt 15 đại diện, bạn sẽ có thể gắn cờ các câu hỏi giống hệt như 'trùng lặp' để chỉ có một bản sao câu trả lời của bạn. Cảm ơn vì đã chia sẻ câu trả lời của bạn cho vấn đề này!
Aurora0001

@Per Hansen Không làm việc cho tôi ... Có thể có một việc khác cần phải làm ngoài việc gán một cổng.
Amit Ray

Điều này làm việc tuyệt vời! Sử dụng không đầu RPi3B + và Raspbian 9,4 (kéo dài).
dparkar

5

Tôi đã đăng một giải pháp khả thi trong diễn đàn mâm xôi bằng máy chủ RTSP nhẹ dựa trên live555 được cung cấp với trình điều khiển V4L2 hỗ trợ chụp H264:

sudo modprobe -v bcm2835-v4l2
git clone https://github.com/mpromonet/v4l2rtspserver.git
cd v4l2rtspserver
cmake .
make install
v4l2rtspserver -H <height> -W <width> -F <fps>

Tiếp theo, bạn sẽ có thể truy cập vào luồng RTSP bằng cách sử dụng:

vlc rtsp://<raspberry>:8554/unicast

Còn thời gian trễ thì sao?
kuhajeyan

ngắn hơn cvlc.
mpromonet

cmake phàn nàn về "Không thể tìm thấy ALSA (thiếu: ALSA_LIBRARY ALSA_INCLUDE_DIR)", cho đến khi tôi thêm một vài gói cho dự án của mình. Giải pháp nằm trong số này:
MoonCactus

oh, và nó hoạt động khá tốt (giải pháp nhẹ), cảm ơn. Thời gian trễ là khá, khoảng 2 giây si nó so sánh thuận lợi với các giải pháp khác imho.
MoonCactus

@MoonCactus: Tôi nghĩ rằng tôi đã sửa lỗi cài đặt ALSA (nó chỉ cần libasound2-dev). Độ trễ phải dưới một giây, nếu bạn sử dụng vlc, bạn có thể giảm bộ đệm mạng bằng cách sử dụng --network-caching 300
mpromonet

4

UV4L (cũng) hỗ trợ truyền phát video và âm thanh HTML5 tiêu chuẩn mà không cần cấu hình. Các tùy chọn khác cũng có thể, như MJPEG qua http.

Cập nhật:

UV4L hiện cũng hỗ trợ truyền phát âm thanh & video trực tiếp tới Phòng họp của Jitsi qua Web. Không cần cấu hình đặc biệt. Thật dễ dàng như điền tên, phòng và nhấp vào Bắt đầu .

Cập nhật lần 2:

UV4L hiện cũng hỗ trợ video được mã hóa phần cứng H264, ở tốc độ khung hình / giây đầy đủ, HD và có thể là Full HD trong tương lai.


1
Chỉ có điều là, bạn chỉ có thể có được luồng nguyên tố mà hầu như mọi thứ đều không hiểu. Không sử dụng nhiều, thật đáng buồn. Bạn cần một cái gì đó để phát ra WebRTC (Nếu bạn có Pi2 trở lên, bạn có thể sử dụng UV4L. Nếu bạn cần (vì hạn chế về sức mạnh / kích thước), hãy thực hiện điều này, SOL của bạn
Svartalf

3

Cả hai mjpeg_streamermotiondường như có độ trễ tốt hơn cvlc.

Sử dụng mjpg_streamer

mjpeg_streamer yêu cầu biên dịch nhưng các hướng dẫn trên github rất đơn giản.

Sau khi biên dịch, nó có thể được chạy bằng cách khởi chạy start.shtừ thư mục dự án hoặc bằng cách chạy trực tiếp (trong thư mục dự án):

./mjpg_streamer -i "./input_uvc.so -rot 180" -o "./output_http.so -w ./www -p 8090"

nơi 8090là cổng TCP. Nếu không được chỉ định, thì cổng 8080sẽ được sử dụng theo mặc định. Các start.shkịch bản có chứa một số ví dụ sử dụng với tùy chọn bổ sung.

Sử dụng motion

Chuyển động bao gồm dịch vụ systemd giúp dễ dàng tự khởi động khi khởi động, dừng hoặc khởi động lại.

Để sử dụng nó trong chế độ webcam IP, các cài đặt sau phải được đặt trong /etc/motion/motion.conf:

daemon on
stream_localhost off
output_pictures off
ffmpeg_output_movies off
stream_maxrate 24
framerate 24
width 640
height 480

Tiếp theo, trong /etc/default/motionbộ:

start_motion_daemon=yes

Để tự khởi động dịch vụ khi khởi động:

systemctl enable motion

Sử dụng systemctl start/stop/restart motioncho các hành động tương ứng.

Cổng phát trực tuyến mặc định là 8081. Các cổng được thiết lập dưới stream_porttrong /etc/motion/motion.conf.


1

Tôi không biết nếu bạn đang tìm kiếm một phần mềm giám sát, nhưng tôi đã thành công trong việc cài đặt và chạy motion, một trình phát hiện chuyển động phần mềm. Bạn nên có một cái nhìn trong hướng dẫn chính thức .


Chuyển động chỉ áp dụng cho máy ảnh USB
genorama

3
Chuyển động @geneorama sử dụng giao diện video4linux không bị giới hạn đối với camera USB, mô-đun bcm2835-v4l2 cho phép truy cập vào bảng camera thông qua giao diện này.
mpromonet

1

Tôi đã có thể truyền phát video bằng uv4l WebRTC trên Raspberry Pi 2. Thật dễ dàng. Chỉ cần làm theo hướng dẫn này . Tôi hy vọng sự giúp đỡ này.


Vui lòng bao gồm các phần có liên quan của hướng dẫn ở đây, để ngăn ngừa thối liên kết.
Bex

Chỉ áp dụng trên Pi2 trở lên. Không hoạt động với 1A / 1A + / Zero. Không hoàn toàn chắc chắn tại sao anh ta không thể vì mọi người dường như có thể làm điều đó, nhưng này ...
Svartalf

1

Tôi gặp sự cố khi tải luồng video trên windows 7. Có nhiều giải pháp linux, không phải tôi không thể sao chép chúng trên windows cho đến bây giờ. Cuối cùng tôi đã nhận được một giải pháp khá nhanh:

  1. lấy phiên bản windows của netcat: http://joncraton.org/files/nc111nt.zip , giải nén nó và thêm vào đường dẫn
  2. nhận phiên bản mới của mpc-hc, có thể đọc từ stdin: https://mpc-hc.org/doads/ cài đặt và thêm đường dẫn của nó vào đường dẫn (tôi là 64 bit, nhưng hy vọng 32 bit sẽ làm được cũng)

Trên pi mâm xôi:

raspivid -t 0 -w 1024 -h 768 -fps 20 -b 1000000 -o - | nc your.receiver.ip.address 5001

Trên máy tính windows:

nc -l -p 5001 | mpc-hc64 -

Vì vậy, tôi cho rằng, không có gì được đóng gói lại hoặc phát lại, được làm lại hoặc những gì đã từng như vậy. Luồng nhị phân từ raspvid được đưa vào mpc và hiển thị. Quả mâm xôi của tôi hoạt động qua wifi, vì vậy, lúc đầu tôi nhận được một độ trễ khá lớn, đó là trong một nửa phút giảm xuống còn độ trễ 0,2-0,3 giây.

Thật không may, tôi không thể sử dụng vlc theo cách tương tự, vì nc -l -p 5001 | vlc -chỉ mở cửa sổ vlc mà không có bất kỳ video nào.


1

Tôi đã sử dụng Nginx với hỗ trợ RTMP để phát trực tuyến ra thế giới, cùng với avconv để xử lý đầu vào camera. Mã có sẵn trên Github .


Tốt, bạn sẽ chia sẻ về bất kỳ thời gian trễ video kinh nghiệm?
kuhajeyan

2
Vâng, đã có độ trễ khoảng 5 giây.
TTT

0

Mặc dù mã của Peter Hansen hoàn toàn có thể hoạt động tốt trên mạng LAN, vì mục đích hoàn toàn: TCP là về tính toàn vẹn dữ liệu so với thời gian thực. Trong luồng thời gian thực, một số mất dữ liệu có thể được chấp nhận vì mục đích hiển thị kịp thời. Trong trường hợp này UDP có thể tốt hơn. Tôi đã không kiểm tra mã đó.

Nếu đó là một camera an ninh, đa phương tiện có thể được xem xét. Các bộ định tuyến hiện đại có thể làm điều đó ngay cả các mô hình $ 100.


0

Tôi đã cài đặt giải pháp ONVIF từ https://github.com/BreeeZe/rpose trên pi của mình, làm theo hướng dẫn trên README.md .

Sự khác biệt duy nhất là tôi đã cài đặt node v8.4.0. Điều này cho phép tôi thấy đầu ra camera của mình trong NVR được kết nối trên cùng một mạng. Ngoài ra, máy ảnh có thể được phát trực tiếp qua luồng mạng trình phát VLC bằng địa chỉrtsp://192.168.1.3:8554/h264


0

Một thời gian đi có một vấn đề tương tự đã xảy ra với điều này:

https://www.npmjs.com/package/ws-avc-player

Barebone của nó nhiều hơn các giải pháp đề xuất khác, nhưng tôi nghĩ rằng nó hoạt động tốt nếu độ trễ thấp trên web là ưu tiên.

Hoạt động trên hầu hết các trình duyệt (thậm chí di động ở 480p) mà không cần bất kỳ plugin nào cần thiết trên trình duyệt.


Tôi đã không tự viết bộ giải mã, đó là một dự án riêng biệt github.com/mbebenita/Broadway Tuy nhiên được tối ưu hóa đáng ngạc nhiên, và như tôi đã nói trong câu trả lời, nó có thể dễ dàng xử lý 480p trên một droid. Lý do tôi đã đi với Brodway là vì không có bộ mã hóa phần cứng vp8 / 9 trên rpi nên h264 thực sự là lựa chọn hợp lý duy nhất. Nhưng nếu bạn muốn sử dụng bộ giải mã h264 riêng trong trình duyệt, bạn có thể quên độ trễ thấp.
MatijaG

Nghe có vẻ khó tin đến nỗi tôi phải thử.
kwasmich

Mọi phản hồi sẽ rất được hoan nghênh :)
MatijaG

Chỉ bây giờ tôi có một chút thời gian rảnh rỗi. Tôi gặp khó khăn khi lấy ví dụ để chạy với raspividnguồn cấp dữ liệu máy ảnh. Với ffmpegmặt khác tôi chỉ nhận được phần mười khung hình mỗi giây. Tôi đã sử dụng Raspbian sạch và Pi Zero. Bạn có một số gợi ý cho tôi?
kwasmich

Vâng với ffmpeg sẽ là một ứng dụng không thể thiếu khi tăng tốc phần cứng. Hãy thử chạy ví dụ với: node example/index.js raspividNó sẽ hoạt động tốt nếu bạn gặp sự cố, hãy thử chạy node example/index.jsvà tách riêng /opt/vc/bin/raspivid -pf baseline -ih -t 0 -w 640 -h 480 -hf -fps 15 -g 30 -o - | nc localhost 5000và xem bạn có nhận được bất kỳ lỗi nào từ raspivid không
MatijaG
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.