Làm cách nào để hiển thị luồng video RTSP trong một trang web?


96

Tôi có một camera ip cung cấp luồng video RTSP trực tiếp. Tôi có thể sử dụng trình phát phương tiện VLC để xem nguồn cấp dữ liệu bằng cách cung cấp cho nó URL:

rtsp://cameraipaddress

Nhưng tôi cần hiển thị nguồn cấp dữ liệu trên một trang web. Nhà cung cấp máy ảnh đã cung cấp một điều khiển ActiveX mà tôi đã làm việc, nhưng nó thực sự có lỗi và khiến trình duyệt thường xuyên bị treo.

Có ai biết về bất kỳ plugin video thay thế nào mà tôi có thể sử dụng hỗ trợ RTSP không?

Máy ảnh có thể được cấu hình để phát trực tiếp ở H264 hoặc MPEG4.


1
Tôi cũng đã khám phá khả năng này với nhiều máy ảnh RTSP của mình và không muốn bất kỳ điều khiển ActiveX nào. Tôi muốn xây dựng một máy chủ web tùy chỉnh mà trang web liên tục truy xuất hình ảnh JPEG để hiển thị trên trang web. Bằng cách này, nó có thể được hỗ trợ trong các trình duyệt như Safari và xem trên iPhone.
Jerry Dodge


@JerryDodge Tôi đã thử ý tưởng với Máy chủ Java WebSocket gửi tên tệp hình ảnh dưới dạng chuỗi, ví dụ: "photo1.jpeg" đến trình duyệt web mỗi giây. JavaScript trong trình duyệt web sử dụng tên tệp để đặt srcthuộc tính của <img>thẻ HTML. Nó hoạt động nhưng rất chậm khiến nó không giống như một video phát trực tiếp. Bạn đã thử ý tưởng của mình chưa? Nó có hoạt động nhanh không?
O Connor

@OConnor Để hiển thị tốc độ khung hình thấp ở mức rất cơ bản, tốt nhất là máy khách nên kéo hơn là máy chủ đẩy. Cũng xem xét TCP so với UDP. Cả hai đều có ưu và khuyết điểm. Đơn giản nhất là khách hàng có thể yêu cầu một hình ảnh mới bất cứ khi nào họ cần.
Jerry Dodge

Câu trả lời:


28

VLC cũng đi kèm với một plugin ActiveX có thể hiển thị nguồn cấp dữ liệu trong một trang web:

http://wiki.videolan.org/ActiveX/HTML

<OBJECT classid="clsid:9BE31822-FDAD-461B-AD51-BE1D1C159921"
     codebase="http://downloads.videolan.org/pub/videolan/vlc/latest/win32/axvlc.cab"
     width="640" height="480" id="vlc" events="True">
   <param name="Src" value="rtsp://cameraipaddress" />
   <param name="ShowDisplay" value="True" />
   <param name="AutoLoop" value="False" />
   <param name="AutoPlay" value="True" />
   <embed id="vlcEmb"  type="application/x-google-vlc-plugin" version="VideoLAN.VLCPlugin.2" autoplay="yes" loop="no" width="640" height="480"
     target="rtsp://cameraipaddress" ></embed>
</OBJECT>

2
Về kỷ lục, tính đến thời điểm này, VLC Media Player được xây dựng bởi 774 nhà phát triển.
Jerry Dodge

15
chrome đã chặn plugin npapi sau ngày 1 tháng 9 năm 2015. nó không hoạt động nữa.
user2988855

1
liên kết axvlc.cab là chết
hailinzeng

phải làm gì nếu plugin bị chặn bất kỳ giải pháp thay thế nào khác có sẵn?
naveenkumar.s

18

Thật không dễ dàng để hiển thị luồng video trực tiếp từ camera IP trên một trang web vì bạn cần băng thông internet rộng và trình phát video tuyệt vời tương thích với các trình duyệt chính.

Nhưng may mắn thay, có một số dịch vụ dựa trên đám mây có thể thực hiện công việc này cho chúng ta. Một trong những ứng dụng tốt nhất là IPCamLive . Dịch vụ này có thể nhận luồng video RTSP / H264 từ Camera IP và có thể phát cho người xem. IPCamLive có thành phần trình phát video Flash / HTML5 sẽ hiển thị video trên PC, MAC, máy tính bảng hoặc thiết bị di động. Điều tuyệt vời nhất là trang web này tạo đoạn mã HTML cần thiết để nhúng video trực tiếp như sau:

<iframe src="http://ipcamlive.com/player/player.php?alias=szekesfehervar" width="800px" height="600px"/>

Vì vậy, chúng tôi chỉ cần sao chép, dán nó vào tệp HTML của chúng tôi mà không cần bất kỳ sửa đổi nào.


1
Điều này thật tuyệt. Một giải pháp rất cần thiết.
Zakir HC

Cập nhật: Rõ ràng là không hoạt động bây giờ. Hiển thị điều này: "Không thể nhúng máy ảnh này. Hãy chuyển sang gói Tiêu chuẩn hoặc Chuyên nghiệp để nhúng."
muglikar

1
Tất cả những gì bạn cần làm là nâng cấp máy ảnh của mình lên gói Tiêu chuẩn / Chuyên nghiệp và bạn sẽ có thể nhúng máy ảnh vào trang web của mình.
Adorjan Princz

17

Thông thường, bạn có thể có 3 lựa chọn để hiển thị luồng video RTSP trong một trang web:

  1. Realplayer
  2. Trình phát thời gian nhanh
  3. Trình phát VLC

Bạn có thể tìm thấy mã để nhúng activeX thông qua tìm kiếm của google.

Theo như tôi biết, có một số hạn chế cho mỗi người chơi.

  1. Realplayer không hỗ trợ video H.264 nguyên bản, bạn phải cài đặt một plugin thời gian nhanh cho Realplayer để đạt được giải mã H.264.
  2. Quicktime player không hỗ trợ truyền tải RTP / AVP / TCP và vận chuyển RTP / AVP (UDP) của nó không bao gồm việc đục lỗ NAT. Do đó, cách vận chuyển khả thi duy nhất là đường hầm HTTP trong triển khai mạng WAN.
  3. VLC không hỗ trợ đục lỗ NAT cho truyền tải RTP / AVP, nhưng truyền tải RTP / AVP / TCP có sẵn.

2
Các phiên bản gần đây của Quicktime Player đã bỏ hỗ trợ RTSP bắt đầu với Mavericks.
Mike

totem trên linux / ubuntu cũng hỗ trợ dòng rtsp
Oki Erie Rinaldi

8

Nếu bạn muốn truyền trực tiếp RTSP lên trang web, thì tôi e rằng lựa chọn duy nhất của bạn là sử dụng trình xem điều khiển ActiveX đi kèm với máy ảnh. Đây là kết nối trực tiếp IP Cam -> Viewer, và thực sự phải nhanh nhất. Không chắc chắn tại sao bạn gặp vấn đề; Axis ActiveX hoạt động khá tốt đối với tôi.

Tuy nhiên, tùy chọn này không thực sự tiết kiệm băng thông và bạn không thể phục vụ nhiều người xem đồng thời (hầu hết các IP Cam có giới hạn 10 người xem). Tùy chọn tốt hơn là tải một luồng RTSP duy nhất lên máy chủ phát trực tuyến được lưu trữ tập trung, máy chủ này sẽ chuyển đổi luồng của bạn thành RTMP / MPEG-TS và xuất bản nó lên trình phát Flash / Hộp giải mã tín hiệu.

Wowza, Erlyvideo, Unreal Media Server, Red5 là những lựa chọn của bạn.


Điều này chắc chắn là con đường để đi. Quản lý băng thông tốt hơn và cũng chuyển mã sang định dạng phù hợp với web, ví dụ như RTMP cho trình phát flash. Có ai có kinh nghiệm sử dụng bất kỳ máy chủ phương tiện nào ở trên và có thể giải thích thêm về tính dễ thiết lập, hiệu suất, độ trễ, v.v. không? Tôi đã thử với Red 5 nhưng thấy một số thứ hơi khó để bắt đầu hoạt động.
elMarquis

8

Đã tìm thấy một giải pháp đơn giản và hiệu quả từ tài liệu chính thức của VLC cho plugin web

https://wiki.videolan.org/Documentation:WebPlugin/

Đã sửa đổi mã một chút và nó hoạt động. Đây là mã của tôi-

<embed type="application/x-vlc-plugin" pluginspage="http://www.videolan.org" autoplay="yes" loop="no" width="300" height="200" target="rtsp://10.20.50.15:554/0/888888:888888/main" />
<object classid="clsid:9BE31822-FDAD-461B-AD51-BE1D1C159921" codebase="http://download.videolan.org/pub/videolan/vlc/last/win32/axvlc.cab" style="display:none;"></object>

Lưu ý: Đoạn mã trên sử dụng rtspđịnh dạng url được camera IP của tôi hỗ trợ. Vì vậy, bạn cần phải làm như vậy cho máy ảnh của mình. Bạn có thể nhận được thông tin này bằng cách tham khảo ý kiến ​​bộ phận hỗ trợ của nhà cung cấp máy ảnh. Cũng xin lưu ý rằng tôi đã thử nghiệm nó trên Chrome (sử dụng plugin activeX cho Chrome) và các trình duyệt khác (bao gồm cả trình duyệt trên điện thoại di động) có thể không được hỗ trợ.


3
Hãy nhớ rằng bạn đã tìm thấy một số cửa sổ chỉ có activeX crap, không phải là "giải pháp" như bạn gọi và nó sẽ không hoạt động trên bất kỳ thứ gì khác (OSse thực, điện thoại di động, bảng điều khiển, v.v.).
nonchip

@nonchip à, tôi nghĩ rằng bạn có một giải pháp tốt hơn cho vấn đề. Hơn nữa, tôi đã thử nghiệm plugin trên điện thoại Android nên nó không chỉ dành cho Windows . Và dù sao đi nữa, tôi thực sự muốn biết bạn có ý tưởng thay thế đa nền tảng nào để hiển thị nguồn cấp dữ liệu từ camera CCTV.
Swastik Padhi

xin lỗi, nhưng đó là một lời nói dối. Activex bạn nhúng - theo định nghĩa - chỉ giành chiến thắng. những gì chrome trên android làm là nhận dạng x-vlc-plugin, bỏ qua những thứ độc quyền và chỉ cần đẩy một ứng dụng vlc có ý định. ngoài ra, về các lựa chọn thay thế đa nền tảng mà bạn đề cập: giải pháp duy nhất hiện tại là sử dụng ffmpeg / avconv / etc trong máy chủ web để đóng gói lại luồng rtsp thành http / websocket / webrtc. sau đó chỉ cần thêm một <video>thẻ và bạn đã hoàn tất.
nonchip

1
dòng không chơi, có thể vấn đề này (codebase) http://download.videolan.org/pub/videolan/vlc/last/win32/axvlc.cab404 không tìm thấy
Vara Prasad

7

Ngoài ra, bạn có thể thử mã nguồn mở WebRTC Media Server Kurento

Có thể phát luồng video RTSP và gửi đến WebRTC hoặc chuyển mã sang RTMP hoặc lưu trên máy chủ.

Chúng tôi đang sử dụng nó trên Sản xuất cho các trường hợp sau:

 - WebRTC sang Webrtc (nhiều đến nhiều)
 - WebRTC sang RTMP
 - RTSP sang WebRTC

1
liên kết không còn hoạt động nữa, cảm ơn vì thông tin.
medskill

liên kết được sao lưu @medskill
activedecay

5

Wowza

  1. Phát lại RTSP sang RTMP (Flash Player) Sẽ không hoạt động với Android Chrome hoặc FF (Flash không được hỗ trợ)
  2. Phát lại RTSP sang HLS

Máy chủ cuộc gọi web (Flashphoner)

  1. Truyền lại RTSP sang WebRTC (Tính năng trình duyệt gốc dành cho Chrome và FF trên Android hoặc máy tính để bàn)

  2. Truyền lại RTSP sang Websockets (iOS Safari và Chrome / FF Desktop)

Hãy xem bài viết này .


Đó là một bài báo thực sự tuyệt vời. Flashphoner có vẻ là một giải pháp đầy hứa hẹn.
elMarquis

3

Tôi biết rằng bài đăng này đã cũ nhưng tôi đã tìm kiếm thứ gì đó rất giống vào ngày hôm trước (xem nguồn cấp dữ liệu video RTSP của IP cam của tôi trên một trang html đơn giản mà không có bất kỳ plugin ActiveX ưa thích nào). May mắn thay, tôi đã tìm thấy một giải pháp! Nó dựa trên ffmpeg, NodeJS, NGINX (không bắt buộc nhưng hữu ích) và Node Media Server .

Mô tả trong liên kết rất chi tiết và dễ làm theo, nhưng tôi vẫn phải xử lý một số chỉnh sửa trước khi bắt đầu hoạt động (liên quan đến các điểm cuối trên máy chủ NodeJS). Tôi đã đặt một câu hỏi riêng cho nó và nhận được một câu trả lời tốt và hiệu quả .


3

Hãy dùng thử QuickTime Player! Đây là JavaScript của tôi tạo đối tượng được nhúng trên trang web và phát luồng:

//SET THE RTSP STREAM ADDRESS HERE
var address = "rtsp://192.168.0.101/mpeg4/1/media.3gp";

var output = '<object width="640" height="480" id="qt" classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab">';
    output += '<param name="src" value="'+address+'">';
    output += '<param name="autoplay" value="true">';
    output += '<param name="controller" value="false">';
    output += '<embed id="plejer" name="plejer" src="/poster.mov" bgcolor="000000" width="640" height="480" scale="ASPECT" qtsrc="'+address+'"  kioskmode="true" showlogo=false" autoplay="true" controller="false" pluginspage="http://www.apple.com/quicktime/download/">';
    output += '</embed></object>';

    //SET THE DIV'S ID HERE
    document.getElementById("the_div_that_will_hold_the_player_object").innerHTML = output;

Cảm ơn. Tôi đã khám phá tùy chọn thời gian nhanh, nhưng có một số độ trễ thực sự tồi tệ với nó.
elMarquis

Đó là vì bộ đệm 3 giây của QuickTime ... điều đó cũng làm phiền tôi ... Này nếu bạn tìm thấy thứ khác hoạt động, vui lòng đăng ở đây! Tạm biệt!
Cipi

2
Xin chào, bạn có một lỗi, sau này "address" được viết thành "asdress". Cheers
Clinton Green

3
Tại sao điều này được viết bằng JavaScript?
Thomas Bennett

@Clinton: Đã sửa.
AlastairG

2

Kiểm tra thư viện luồng phương tiện theo Trục chuyển tiếp trên phần mở rộng Nguồn phương tiện

Họ triển khai một đường ống tương tự như Gstreamer trong JS với phần bổ sung h264 trong đó. Lưu ý: luồng được sử dụng trong js không trực tiếp là rtsp mà được đóng gói thành ws: // bởi chính thư viện trên proxy node.js rtsp-websocket.


2

Tôi đã xuất bản dự án trên Github giúp bạn truyền trực tuyến camera ip / mạng vào trình duyệt web trong thời gian thực mà không cần plugin, tôi đã đóng góp cho dự án mã nguồn mở theo Giấy phép MIT có thể phù hợp với nhu cầu của bạn, đây là:

Truyền trực tuyến IP / Camera mạng trên trình duyệt web bằng NodeJS

Chưa có gói framework đầy đủ nào, nhưng nó là phần khởi động có thể cung cấp cho bạn một cách để tiến xa hơn.
Là một sinh viên, tôi hy vọng điều này hữu ích và hãy đóng góp cho dự án này.


2

Một tùy chọn sẽ là sử dụng một số loại máy chủ / cổng phát trực tuyến. Tôi đã thử nhiều giải pháp khác nhau (vlc, ffmpeg và một số giải pháp khác) và giải pháp phù hợp nhất với tôi là máy chủ Janus WebRTC. Nó hơi khó thiết lập và bạn sẽ phải biên dịch nó từ nguồn (khi tôi dùng thử phiên bản trong kho lưu trữ Ubuntu không có hỗ trợ RTSP), nhưng họ có hướng dẫn biên dịch chi tiết và tài liệu về cách thiết lập mọi thứ.

Tôi đã quản lý để lấy nguồn cấp dữ liệu video và âm thanh từ 3 camera FullHD trên mạng cục bộ với rất ít độ trễ. Tôi có thể xác nhận rằng nó hoạt động với camera Dahua và Hikvision (không chắc chắn nếu tất cả các kiểu máy).

Những gì tôi đã sử dụng là Ubuntu Server 18.04 chạy máy chủ web Apache và Chrome làm trình duyệt (nó không hoạt động trên Firefox theo mặc định nhưng có lẽ có những giải pháp thay thế cho nó).


1

Microsoft Mediaplayer có thể làm tất cả, bạn cần. Tôi sử dụng MS Mediaservices của Máy chủ 2003/2008 để cung cấp Video dưới dạng Broadcast và Unicast Stream. Dịch vụ này có thể NHẬN Luồng từ cam và Phát nó. Hơn bạn chỉ có "vấn đề" là "Hiển thị" Hình ảnh đó trong TẤT CẢ các Trình duyệt ở tất cả Hệ điều hành

Mẹo của tôi: trước tiên hãy kiểm tra hệ điều hành, sau khi tải plugin của bạn. trên Windows thì dễ dàng lấy WMP, ngược lại lấy MS Silverligt ...


1

Đối với các mục đích như thế này, tôi sử dụng VLC làm máy chủ phân phối lại. Bạn nói rằng bạn có thể xem video với VLC? Nhấp chuột phải vào phương tiện trong VLC, chọn "stream" và chọn các tùy chọn của bạn. Bạn cũng có thể làm điều đó với dòng lệnh, điều này mang lại cho bạn những lợi ích tiềm năng của nhiều tùy chọn khác nhau (chuyển mã, chia tỷ lệ, nén, giải xen kẽ). Đây là một lô bắt đầu phân phối VLC từ nguồn đến cổng 555 của riêng nó (vì vậy bạn sẽ phải nhập rstp: // myvlcserveripaddress: 555 trong tùy chọn src của bạn trên trang web để nhận luồng)

cd \
cd C:\Program Files (x86)\VideoLAN\VLC\

vlc --logo-file C:\logo.png --logo-position 5 --logo-opacity 200 --logo-x 900 --logo-y -2 "mmsh://typeyoursourceIPhere:554" :sout=#transcode{vcodec=div3,vb=800,scale=0,acodec=mpga,ab=128,channels=2,samplerate=44100}:duplicate{dst=rtp{mux=ts,sdp=rtsp://:555/stream}} :sout-all :sout-keep

Tại đây , bạn có một mẫu trang web nhúng trình phát (dựa trên plugin VLC).


-7

Tất cả các giải pháp trên không hoạt động lâu hơn hoặc quá tốn thời gian để tìm ra.

Đây là câu trả lời cuối cùng. Bạn có thể nhúng liên kết rtsp vào trang web của mình.

Sao chép mã dưới đây trong trình chỉnh sửa html của bạn:

<!--- BEGIN PLAYER --->

<!-- webbot bot="HTMLMarkup" startspan ---->

<object ID="MediaPlayer" WIDTH="320" HEIGHT="270" CLASSID="CLSID:22D6f312-B0F6-11D0-94AB-0080C74C7E95" STANDBY="Loading Windows Media Player components..." TYPE="application/x-oleobject" CODEBASE="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,7,1112">

<param name="autoStart" value="True">

<param name="filename" value="rtsp://xxx.xxx.xxx:xxxx">

<param NAME="ShowControls" VALUE="False">

<param NAME="ShowStatusBar" VALUE="False">

<embed TYPE="application/x-mplayer2" SRC="rtsp://xxx.xxx.xxx:xxxx" NAME="MediaPlayer" WIDTH="320" HEIGHT="270" autostart="1" showcontrols="0"></embed></object>

<!-- webbot bot="HTMLMarkup" endspan ---->

<!--- end PLAYER --->

Nếu tất cả những điều này quá phức tạp và vẫn không giải quyết được nó, hãy để tôi giúp bạn.

Tôi đã làm điều này cho khách hàng của tôi.

Nhấp vào đây http://www.mhcreative.com.my/ipcameratowebsite/


Lạ thay, nó kết thúc với việc nhúng VLC Media Player, đó là vì VLC được coi là "trình phát đa phương tiện mặc định" cho các trang web?
Jerry Dodge

Chờ đã, đó là WMP, tôi cho rằng điều này sẽ chỉ hoạt động trên Windows.
Jerry Dodge

2
việc triển khai trang web của bạn không như những gì bạn đã mô tả trong câu trả lời của mình. Bạn đang sử dụng dịch vụ click2stream, vui lòng thay đổi câu trả lời của bạn, vì chúng tôi lãng phí thời gian. Bạn nói về những giải pháp khác không hiệu quả, nhưng giải pháp của bạn không tồn tại.
stefan2410

3
Lạ là bạn viết: "Đây là câu trả lời cuối cùng." Còn về sự khiêm tốn, đặc biệt là khi bỏ một câu trả lời thiếu chất lượng như vậy thì sao?
Pille

1
Cách tiếp cận này sử dụng điều khiển x hoạt động (dành cho IE 10 trở xuống) sau đó hoàn nguyên về một plugin khác cho các trình duyệt khác. Như đã đề cập, nó dường như nhúng trình phát phương tiện VLC trong hầu hết các trường hợp. Đây không phải là một cách tiếp cận tồi tệ, nhưng việc thu hút người dùng cài đặt một plugin sẽ luôn có một chút khó khăn. Mặt khác, nếu bạn có một lượng khán giả hạn chế và có thể chỉ định thiết lập của họ, thì cách tiếp cận này có thể phù hợp.
elMarquis
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.