利用RTMP实现直播系统
- 格式:pdf
- 大小:300.87 KB
- 文档页数:6
直播技术实现方案范文全文共四篇示例,供读者参考第一篇示例:随着互联网的不断发展,直播技术已经成为一种非常流行的传播方式。
无论是在生活娱乐领域,还是在商业营销领域,直播技术都发挥着重要的作用。
在直播技术中,如何实现高清流畅的画面传输、高质量的声音效果以及稳定的直播平台成为关键。
一、直播技术实现方案的基本原理1. 视频采集:直播技术的第一步是通过摄像头或其他视频采集设备将现场视频信号采集到计算机或其他设备中进行处理。
视频采集设备的选择将直接影响最终直播的画质。
2. 视频编码:视频信号是通过编码器将模拟信号或数字信号转换成数字信号的过程。
视频编码的目的是将视频信号压缩以减少数据量,同时保持画质。
3. 网络传输:通过互联网将压缩后的视频信号传输到直播平台。
网络传输的快慢、稳定性将直接影响直播的流畅度。
4. 直播平台:直播平台是用户观看直播视频的地方,也是主播进行直播的地方。
直播平台需要具备高带宽和高处理能力,以支持大量用户观看。
在实际操作过程中,直播技术实现方案可以按照以下步骤进行:4. 直播平台:在直播平台上创建直播间并进行直播。
观众可以通过直播平台观看直播内容。
5. 直播互动:主播可以与观众进行互动,比如与观众进行实时聊天或回答观众提问等。
6. 结束直播:直播结束后,可以对直播进行回顾或保存。
在实现直播技术方案过程中,需要注意以下几个关键技术要点:1. 视频编码技术:选择高效的视频编码器可以保证画质的同时减少数据传输量。
2. 网络传输稳定性:保证网络带宽稳定、延迟低可以保证直播画面流畅。
3. 服务器负载均衡:在直播平台上需要分配合理的服务器资源,以支持大量用户观看直播。
4. 数据安全性:直播内容和用户数据需要得到充分的保护,避免泄露和篡改。
5. 互动功能:在直播平台中加入互动功能可以增强用户体验,提高直播的关注度。
直播技术实现方案已经广泛应用于各个领域,包括但不限于:1. 线上教育:教育机构可以通过直播技术开设网络课程,提高教学效果。
直播技术的流媒体传输协议常见的直播流媒体传输协议介绍直播技术在现代社交媒体中的应用越来越广泛,为了实现高质量的流媒体传输,直播平台借助各种流媒体传输协议。
本文将介绍几种常见的直播流媒体传输协议,并对其特点进行分析。
一、RTMP协议RTMP(Real-Time Messaging Protocol)是一种实时消息传输协议,由Adobe开发。
它采用基于TCP的传输方式,在互联网传输中表现出良好的稳定性和实时性。
RTMP协议通过将音频、视频及元数据打包成小块传输,保证了传输的流畅性和稳定性。
RTMP协议被广泛应用于实时直播领域,尤其在低延迟的直播环境下表现出色。
二、HLS协议HLS(HTTP Live Streaming)协议是由Apple提出的流媒体传输协议。
HLS协议基于HTTP协议,将整个视频分成多个小的TS (Transport Stream)文件,通过HTTP协议逐个传输。
HLS协议适应性强,支持多种终端设备播放,并且能够自适应网络环境的变化。
这使得HLS成为了许多直播平台的首选协议。
三、DASH协议DASH(Dynamic Adaptive Streaming over HTTP)协议是一种动态自适应流媒体传输协议,由MPEG联盟制定。
DASH协议无需握手过程,通过HTTP协议动态获取数据,根据客户端自身的网络情况和解码能力选择相应的码率和片段进行播放。
DASH协议具有较好的抗丢包能力和适应性,能够在不同的网络环境下提供良好的用户体验。
四、FLV协议FLV(Flash Video)协议是一种用于传输视频和音频的流媒体传输协议,由Adobe Flash Player支持。
FLV协议将视频和音频数据打包成FLV文件进行传输,常用于Adobe Flash Player播放器的直播功能。
然而,由于Adobe Flash Player不再被主流浏览器支持,FLV协议的使用范围受到了限制。
五、WebSocket协议WebSocket协议是一种全双工通信协议,它可以在一个TCP连接上实现双向通信。
网络协议知识:RTMP协议的工作原理及应用RTMP协议的工作原理及应用RTMP(Real-Time Messaging Protocol)是一种实时传输协议,主要用于音视频流的传输,如在线直播、点播等。
它由Adobe公司开发,并在2008年推出了各种开源项目,如NGINX、Wowza等,成为广泛应用的协议之一。
RTMP协议的工作原理RTMP协议的工作原理非常简单,基本上分为三个部分:建立连接、传输数据、断开连接。
建立连接在客户端请求连接时,服务器会响应一个握手消息,通过TCP三次握手建立连接。
握手过程中,客户端会发送C0和C1两个消息,分别包含了主要的连接请求信息。
服务器会发送S0和S1两个回应消息,包含了连接请求的确认以及一些额外的验证信息。
过程如下:1.客户端发送C0消息,告诉服务器它要建立一个新的RTMP连接。
2.服务器回复S0消息,告诉客户端连接已成功建立。
3.客户端发送C1消息,包含了一些验证信息,如时间戳、认证密钥等。
4.服务器回复S1消息,包含了对C1消息的确认,以及一些服务器信息(如时间戳、加密密钥等)。
5.此时,客户端已经可以开始发送数据。
传输数据在建立连接后,客户端可以开始发送音视频数据,数据传输主要分为两种方式:1.传输视频数据:客户端通过发送RtmpMessage包(RTMP数据包)来传输视频流。
RtmpMessage包由一个固定格式的消息头和消息体组成,消息头包含了流ID、时间戳等信息,消息体则包含了实际的视频数据。
2.传输控制数据:除了视频流外,RTMP协议还可以传输控制数据(如ping包、取消流数据等),这些控制信息都由特殊的RtmpMessage包组成。
断开连接当客户端不再需要连接时,它可以发送一个断开连接的消息告诉服务器。
服务器会回复一个确认消息,并关闭连接。
过程如下:1.客户端发送断开连接的RtmpMessage包,告诉服务器它不再需要连接。
2.服务器回复一个确认消息,并关闭连接。
直播系统的设计与实现近年来,随着网络技术的不断发展,直播平台逐渐成为人们娱乐生活中的重要组成部分。
无论是观看体育赛事、听取名人讲座,还是参与互动直播,都已成为了人们日常生活的一部分。
因此,如何开发一款好用且稳定的直播系统,成为了互联网行业的重点研发方向之一。
设计一个直播系统,首先需要明确需求,尤其要关注用户需求。
用户需要在观看直播时,能够获得高质量、流畅的视音频体验,而且应该具备丰富的交互功能,包括点赞、评论、送礼等。
此外,管理直播的主播,也需要一个易于操作、强大且可定制的后台管理系统,才能更好地与用户互动,满足用户的需求。
接下来,设计者需要确定系统的整体架构。
一般而言,直播系统包括客户端和服务器端两个部分。
客户端主要是用户观看直播的入口,通常包括Web端、移动端和PC端,而服务器则是作为数据交换的枢纽,负责直播流媒体的传输、直播数据的存储和管理等。
对于直播系统的开发而言,关键技术之一就是流媒体的传输。
现在,大多数直播平台都采用了基于RTMP(Real Time Messaging Protocol)或HLS(HTTP Live Streaming)协议的流媒体传输方式。
RTMP支持实时流媒体的传输,实现了低延迟的直播效果,可用于视频直播、游戏直播等,但不支持HTML5,因此难以在移动设备上得到良好的兼容性;而HLS虽然兼容性更好,但却有着明显的延迟,不适合实时直播场景。
因此,在自己的直播系统中选择哪种流媒体传输技术,需要根据实际情况综合考虑。
同时,还需要考虑直播系统的安全性。
作为一个实时传输直播内容的平台,直播系统需要极强的安全性能,以避免恶意攻击、内容侵犯和数据泄露等问题。
常见的安全策略包括在客户端和服务器端使用HTTPS协议、实现登录验证和用户权限管理、对数据进行加密等。
另外,在服务器端的工程架构设计上,直播系统需要具备高可用性、高并发和伸缩性等特性。
为了保证系统的可靠性,通常需要使用负载均衡技术、CDN(Content Delivery Network)分发技术和异地容灾备份等。
Nginx+Rtmp实现rtmp和HLS直播流,同时实现时移(分段录制回放)功能#!/bin/shif [ $(id -u) != "0" ]; thenecho "Error: Please use root role to install!"exit 1ficlearecho "========================================"echo ""echo "========================================"echo "======= nginx_rtmp one key sctipt ======"echo "========================================"echo ""echo "========================================"get_char(){SAVEDSTTY=`stty -g`stty -echostty cbreakdd if=/dev/tty bs=1 count=1 2> /dev/nullstty -rawstty echostty $SAVEDSTTY}echo ""#echo "Press any key to start...or Press Ctrl+c to cancel"#char=`get_char`echo "========================================"echo "Start install nginx_rtmp ..."echo "========================================"yum -y install gcc gcc-c++ autoconf automakeyum -y install zlib zlib-devel openssl openssl-devel pcre-develcur_dir=$(pwd)cd nginx-1.8.0echo "========================================"echo "configure start ..."echo "========================================"./configure \--prefix=/usr/local/nginx \--sbin-path=/usr/local/nginx/nginx \--conf-path=/usr/local/nginx/nginx.conf \--pid-path=/usr/local/nginx/nginx.pid \--error-log-path=/usr/local/nginx/logs/error.log \--add-module=../nginx-rtmp-module \--with-http_mp4_moduleecho "========================================"echo "make &install"echo "========================================"makemake installecho "========================================"echo "Setting start"echo "========================================"cd $cur_dir\cp nginx.conf /usr/local/nginx/\cp nginx-rtmp-module/stat.xsl /usr/local/nginx/html/\cp nginx /etc/rc.d/init.d/chmod +x /etc/rc.d/init.d/nginxchkconfig --add nginxchkconfig nginx onservice nginx startecho "Service Test:"echo "service nginx status"echo "Result:"service nginx status#cat > /etc/fstab <<EOF#tmpfs /usr/local/nginx/html/app tmpfs defaults,size=512M 0 0#EOF#mount -a#echo "tmpfs Test:"#df -hmount -t tmpfs -o size=512m tmpfs /usr/local/nginx/html/appecho "mount -t tmpfs -o size=512m tmpfs /usr/local/nginx/html/app" >> /etc/rc.d/rc.local echo "========================================"echo "Firewall config"echo "========================================"iptables -I INPUT -p tcp --dport 6080 -j ACCEPTiptables -I INPUT -p tcp --dport 5080 -j ACCEPTiptables -I INPUT -p tcp --dport 1935 -j ACCEPTservice iptables saveecho "========================================"echo "Install end."echo "========================================" nginx.conf#user nobody;worker_processes 1;#error_log logs/error.log;#error_log logs/error.log notice;error_log logs/error.log info;#pid logs/nginx.pid;worker_rlimit_nofile 51200;events {use epoll;worker_connections 1024;}rtmp_auto_push on;rtmp_auto_push_reconnect 1s;rtmp {server {listen 1935;chunk_size 4096;application live {live on;max_connections 1024;}application hls {live on;hls on;hls_path /usr/local/nginx/html/app;hls_fragment 3s;hls_playlist_length 30s;hls_sync 100ms;meta copy;recorder chunked {record all;#record_max_size 6200K;record_interval 10s;record_suffix -%Y-%m-%d-%H_%M_%S.flv;record_path /data/www/Upload/Rec/Chunked;}recorder all {record all;record_suffix -%Y-%m-%d-%H_%M_%S.flv;record_max_size 6200000K;record_path /data/www/Upload/Rec;}}application Upload {play /data/www/Upload;}}}http {include mime.types;default_type application/octet-stream;#log_format main '$remote_addr - $remote_user [$time_local] "$request" '# '$status $body_bytes_sent "$http_referer" '# '"$http_user_agent" "$http_x_forwarded_for"';#access_log logs/access.log main;sendfile on;#tcp_nopush on;#keepalive_timeout 0;keepalive_timeout 65;#gzip on;server {listen 5080;server_name localhost;#charset koi8-r;#access_log logs/host.access.log main;location / {root html;index index.html index.htm;}#error_page 404 /404.html;# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {# proxy_pass http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 ##location ~ \.php$ {# root html;# fastcgi_pass 127.0.0.1:9000;# fastcgi_index index.php;# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {# deny all;#}location /hls {types {#application/vnd.apple.mpegurl m3u8;application/x-mpegurl m3u8;video/mp2t ts;}alias /usr/local/nginx/html/app;}location /stat {rtmp_stat all;rtmp_stat_stylesheet stat.xsl;}location /stat.xsl {root html;}}server {listen 6080;server_name localhost;location / {root /data/www/AVA.ResourcesPlatform.AdminUI;index index.html index.htm;mp4;mp4_buffer_size 1m;mp4_max_buffer_size 5m;#mp4_limit_rate on;#mp4_limit_rate_after 30s;limit_rate 1m; # about 2mbitlimit_rate_after 5m;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}#location ~ \.mp4$ {#}}# another virtual host using mix of IP-, name-, and port-based configuration ##server {# listen 8000;# listen somename:8080;# server_name somename alias another.alias;# location / {# root html;# index index.html index.htm;# }#}# HTTPS server##server {# listen 443 ssl;# server_name localhost;# ssl_certificate cert.pem;# ssl_certificate_key cert.key;# ssl_session_cache shared:SSL:1m;# ssl_session_timeout 5m;# ssl_ciphers HIGH:!aNULL:!MD5;# ssl_prefer_server_ciphers on;# location / {# root html;# index index.html index.htm;# }#}}。
《基于rtmp的远程教学直播系统的设计与实现》篇一一、引言随着互联网技术的快速发展,远程教学直播系统逐渐成为教育领域的重要工具。
本文旨在探讨基于RTMP(Real Time Messaging Protocol)的远程教学直播系统的设计与实现。
该系统能够有效地实现音视频的实时传输,为教育工作者和学生提供一个高效、稳定的在线教学平台。
二、系统需求分析1. 功能性需求系统需要实现的功能包括音视频直播、在线互动、课件共享、实时问答等。
同时,为了保障教学质量,系统应具备稳定的传输性能和低延迟的音视频同步。
2. 性能需求系统应具备高并发处理能力,以支持大量用户同时在线。
此外,系统还应具备较低的延迟和丢包率,确保音视频传输的流畅性。
3. 安全性需求为了保证用户隐私和数据安全,系统应采用加密传输技术,防止数据在传输过程中被窃取或篡改。
同时,系统应具备访问控制功能,确保只有授权用户才能访问系统资源。
三、系统设计1. 架构设计系统采用分布式架构,以RTMP作为音视频传输协议。
前端采用Web技术实现界面交互,后端采用高性能服务器搭建直播服务器集群。
整个系统分为前端、后端和存储端三个部分。
2. 模块设计(1)前端模块:主要负责用户界面交互,包括音视频播放、互动聊天、课件浏览等功能。
(2)后端模块:负责音视频流的编解码、传输和存储。
采用RTMP协议实现音视频流的实时传输,同时支持H.264等编码格式。
(3)存储模块:负责音视频数据的存储和管理,支持分布式存储和备份,确保数据的安全性和可靠性。
四、系统实现1. 关键技术实现(1)音视频编解码:采用H.264等编码格式对音视频进行编解码,提高传输效率。
(2)RTMP传输:采用RTMP协议实现音视频流的实时传输,确保低延迟和稳定性的要求。
(3)数据存储:采用分布式存储技术,将音视频数据存储在多个服务器上,确保数据的安全性和可靠性。
2. 系统部署与测试系统部署在高性能服务器上,通过负载均衡技术实现高并发处理能力。
流媒体网络现场直播系统的开发与实际应用随着互联网的普及和流媒体技术的发展,现场直播已经成为一种非常流行的娱乐、教育和商业形式。
流媒体网络现场直播系统是指通过互联网将现场的视频、音频和文字实时传输到观众的电脑、手机或电视的系统。
本文将介绍流媒体网络现场直播系统的开发和实际应用。
一、系统架构流媒体网络现场直播系统的基本架构包括三个部分:采集端、服务器端和播放端。
1. 采集端采集端一般是一个集成摄像头、麦克风和编码器的设备,负责将现场视频和音频编码为流媒体格式。
采集端也可以是一台普通的电脑或手机,通过特定的软件将视频和音频采集并编码。
采集端还可以添加一些特效和滤镜,提高直播的质量和观赏性。
2. 服务器端服务器端是网络直播的关键部分,主要负责接受采集端传输的流媒体数据,并将其转发给观众。
服务器端一般由多个服务器组成,包括负载均衡服务器、转码服务器和流媒体服务器。
其中负载均衡服务器用于管理和控制多个转码和流媒体服务器的负载均衡,确保观众能够从最近的服务器获取直播数据。
转码服务器用于将不同格式的流媒体数据转码为适合不同网络带宽的格式,提高直播的稳定性和观看体验。
流媒体服务器则是负责将流媒体数据实时传输到观众的设备上。
3. 播放端播放端是观众观看直播的设备,例如电脑、手机、平板或电视。
播放端需要安装流媒体播放器,例如VLC、Flash Player或HLS Player等。
播放端通过网络接收流媒体数据,并将其解码和播放出来。
二、系统开发流媒体网络现场直播系统一般的技术选型包括:Windows/Linux操作系统、Java/C++/Python编程语言和FFmpeg、Wowza、Nginx等开源或商业流媒体服务。
前端设计可以通过HTML5+CSS3+JavaScript技术实现,采用响应式布局、可触摸滑动、自适应分辨率等特点,优化观看体验。
前端设计还可以添加一些特效和互动功能,例如弹幕、点赞、分享等。
2. 后台开发后台开发包括服务器端和数据库设计两个部分。
《基于rtmp的远程教学直播系统的设计与实现》篇一一、引言随着互联网技术的快速发展,远程教学直播系统逐渐成为教育领域的重要工具。
本文将介绍一种基于RTMP(Real Time Messaging Protocol)的远程教学直播系统的设计与实现。
该系统通过RTMP协议实现音视频流的实时传输,为教育机构提供高效、稳定的直播教学服务。
二、系统需求分析1. 功能性需求系统需支持音视频的实时传输与播放,支持多路音视频流的并发传输,支持教师与学生之间的实时互动。
此外,系统还需具备课程录制、回放、点播等功能。
2. 非功能性需求系统需保证音视频流的传输稳定性与实时性,保证用户操作的便捷性,以及良好的用户体验。
同时,系统还需具备较高的安全性,保障用户数据的安全。
三、系统设计1. 整体架构设计系统采用分布式架构,主要由媒体服务器、推流端、播放器、数据库等部分组成。
媒体服务器采用RTMP协议进行音视频流的传输,推流端负责将音视频流推送到媒体服务器,播放器负责从媒体服务器拉取音视频流并进行播放。
2. 关键技术选型(1)RTMP协议:用于音视频流的实时传输。
(2)媒体服务器:采用开源的SRS(Simple Real-time Server)或FFmpeg等软件,支持RTMP协议的音视频流处理与传输。
(3)推流端与播放器:采用WebRTC、H5等技术实现,支持多平台、多终端的音视频播放与互动。
四、系统功能模块实现1. 推流端实现推流端通过采集教师端的音视频流,使用RTMP协议将其推送到媒体服务器。
具体实现上,推流端可采用SDK或开源软件实现,支持多种平台与终端的接入。
2. 媒体服务器实现媒体服务器负责接收推流端推送的音视频流,并进行转码、存储等处理。
在转码过程中,媒体服务器可根据用户终端的设备性能与网络环境进行自适应转码,保证音视频流的播放质量。
同时,媒体服务器还需对音视频流进行加密处理,保障用户数据的安全。
3. 播放器实现播放器从媒体服务器拉取音视频流并进行播放。
手机直播APP源码怎样实现直播平台手机直播APP源码的出现给直播注入了新的活力,也给直播市场带来了新的商机,而这个商机就是手机直播平台,那么怎样轻松实现一款属于自己的直播平台呢?第一步:分解直播App的功能1. 视频直播功能,这是一款直播App最主要的功能,要能支持视频直播RTMP推流,使画面传输流畅、清晰(美颜后的清晰,你懂的2. 聊天功能,用户之间的互动聊天,包括文字和表情(小粉丝间的小秘密3. 互动功能,用户与主播间的互动,点亮个灯,送一束花等等4. 支付&提现功能,用户用现金购买礼物送给心仪的主播,主播收到礼物后可再兑换成现金取出5. 视频回放功能,在直播的过程中同时录像,使得没看到直播的小粉丝也有机会再看6. 分享功能,将房间号分享到微信、微博、QQ等第二步:寻找合适的云服务SDK进行嵌入,在APICloud的聚合API中可以轻易找到以上的功能模块,挑选合适的模块封装到自己的App中1. 视频直播功能有ytylive qupaiLive 亲加云等模块。
拿ytylive举例,此模块支持主流RTMP 服务器支持目前所有主流的RTMP 服务器(simple-rtmp-server、crtmpserver、FMS 等)。
支持所有的RTMP 协议支持所有RTMP 协议及变种(RTMP、RTMPT、RTMPE、RTMPS、RTMPTE、RTMPTS 等)。
性能强大资源(CPU/内存) 占用率低,使用硬件加速进行编码,压缩比例大,延时小。
支持实时滤镜支持多种实时滤镜效果(Gray、InvertColors、Sepia、Fisheye、Glow、Gaussionblur)。
而像亲加云模块共有4个,包括视频直播基础模块、视频直播模块、视频播放器模块和视频直播聊天室模块。
聊天文本/表情输入有chatbox,UIChatbox等模块。
及时通讯(互动功能):融云,环信等模块,也可以自己通过socketManager自己封装协议实现4. 支付提现:支付宝、ping++、微信支付、银联支付、现在支付等模块5. 视频回放:视频回放功能的实现其实是录像+存储到服务器中,因此使用APICloud 的数据云功能,或是七牛云存储,又拍云等模块都可以实现6. 直播/主播分享:微信、新浪微博、QQ等平台分享模块第三步:完成App开发5步骤现在我们所有的模块已经挑选完毕,开发者按照之前和大家分享过App开发5步骤的内容就可以完成一款直播App的开发。
天创恒达直播推流器主流协议一、引言在直播行业的发展中,直播推流器起到了至关重要的作用。
天创恒达直播推流器是当前主流的推流器之一,它采用了一系列主流协议,保证了高质量的直播传输和观看体验。
本文将对天创恒达直播推流器主流协议进行深入探讨。
二、RTMP协议1.RTMP协议是天创恒达直播推流器主流的传输协议之一。
2.RTMP(Real-Time Messaging Protocol)是一种实时流媒体传输协议,用于在直播过程中传输音视频数据。
3.RTMP协议基于TCP协议,具有低延迟、高稳定性和高质量的特点。
RTMP协议的工作原理1.RTMP协议通过建立TCP连接,实现客户端(推流器)和服务器之间的数据传输。
2.推流器通过RTMP协议将音视频数据逐帧发送到服务器。
3.服务器收到数据后通过RTMP协议将音视频数据分发给观众端(播放器)进行播放。
RTMP协议的优势1.低延迟:RTMP协议采用实时传输方式,可以实现低延迟的直播体验。
2.高稳定性:RTMP协议基于TCP协议,具有良好的传输稳定性,可以保证数据传输的可靠性。
3.可扩展性:RTMP协议支持多种编码格式和分辨率的音视频数据传输,满足不同场景的需求。
三、HLS协议1.HLS协议是天创恒达直播推流器主流的传输协议之一。
2.HLS(HTTP Live Streaming)是一种基于HTTP的流媒体传输协议,用于在直播过程中传输音视频数据。
3.HLS协议将音视频数据切片,并通过HTTP协议逐片传输给客户端进行播放。
HLS协议的工作原理1.推流器将音视频数据切片成短小的TS文件,并生成M3U8索引文件。
2.客户端通过HTTP协议请求M3U8索引文件,并根据索引文件逐段加载TS文件进行播放。
3.客户端会根据网络情况动态调整加载的片段数量和质量,以保证最佳的播放体验。
HLS协议的优势1.兼容性好:HLS协议基于HTTP协议,可以在几乎所有现代浏览器和移动设备上播放。