高清汽车流媒体是什么意思如何格式化

404 Not Found
404 Not Found转载请注明:@小五义QQ群:
一、家庭服务器实现的主要功能
1、流媒体播放服务:利用DLNA实现电视、手机、电脑播放其上面的媒体文件。
2、文件共享:利用samba实现手机、电脑等终端与服务器的文件共享。
3、自动下载:利用aria2c实现自动下载。
先上几张效果图:
用orico的包装盒做了个机箱。
内部效果,线还是有些凌乱
放在桌上,感觉还不错,呵呵
二、准备工作
1、树莓派B+
2、安装raspbian系统,具体安装方法见:。
3、设置固定IP为192.168.1.120,设置方法见:
4、安装vnc软件,安装方法见:
5、准备了一块旧移动硬盘(80G)
6、准备了可外接供电的usb hub一个,树莓派本身输出电流较小,很难保证移动硬盘的运行,所以加了一个可外接供电的usb hub。
三、安装samba实现文件共享
1、准备硬盘
&&&&& 硬盘进行分区和格式化,这里我直接就分了一个区,格式化为ext4格式,据网上介绍说如果是fat或者ntfs等格式可能会出现权限问题,于是干脆直接格式化为ext4格式。硬盘在树莓派上格式化会比较慢,我就在电脑上进行了格式化。电脑操作系统是windows7,利用软件MiniTool Partition Wizard Home Edition 8.0,下载地址:。具体使用方法是先将原分区删除,然后点击creat,在格式那里选ext4,类型我选的primary,label用的nas,然后点击apply就开始格式化硬盘了。(如果用容量较小的U盘,可以直接用树莓派格式化,命令为:mkfs -t ext4 /dev/sdb1)
2、将硬盘挂载到树莓派上
&&&&& 树莓派开机后,用putty连接(连接方法见)后,为方便操作直接进行root用户(具体方法见一楼评论处),然后运行df &h,查看硬盘挂载情况。
# df -h Filesystem&&&&&&&&&&&&& Size&&&&&&& Used&&&&&&& Avail&&&& Use%&&&&& Mounted on rootfs&&&&&&&&&&&&&&&&&&& 2.9G&&&&&& 2.4G&&&&&&& 387M&&&& 87%&&&&&& / /dev/root&&&&&&&&&&&&&& 2.9G&&&&&& 2.4G&&&&&&& 387M&&&& 87%&&&&&& / devtmpfs&&&&&&&&&&&&&& 183M&&&&&&& 0&&&&&&&&&& 183M&&&& 0%&&&&&&&& /dev tmpfs&&&&&&&&&&&&&&&&&&& 38M&&&&&&& 792K&&&&&&& 37M&&&&& 3%&&&&&&& /run tmpfs&&&&&&&&&&&&&&&&&&& 5.0M&&&&&&&& 0&&&&&&&&& 5.0M&&&&&& 0%&&&&&&& /run/lock tmpfs&&&&&&&&&&&&&&&&&&&& 75M&&&&&&&& 0&&&&&&&&& 75M&&&&&&& 0%&&&&&&& /run/shm /dev/mmcblk0p1&&&& 56M&&&&&&& 9.7M&&&&&& 47M&&&&& 18%&&&&&&& /boot /dev/sda1&&&&&&&&&&&&& 70G&&&&&&&& 24M&&&&&&& 67G&&&&& 1%&&&&&&&& /media/nas
最后一行/dev/sda1说明硬盘已经挂载。为下一步安装samba,将共享文件夹设为/samba。于是新建文件夹:
mkdir /samba
设置访问权限:shmod 777 /samba
将硬盘挂载到/samba文件夹,具体步骤:
umount /dev/sda1&& #取消挂载
mount /dev/sda1 /samba
这里再查看df -h,结果为:
这里表示已挂载成功。
3、解决硬盘的自动挂载
&&&&& 每次树莓派重启或者硬盘插拔都需要对硬盘进行重新挂载,比较麻烦,因此需要自动挂载。这里要修改/etc/fstab文件。有人喜欢用vi进行编辑,我比较喜欢直接vnc连接上后,用编辑器进行编辑。
可以看到,fstab文件其实就是一个表格,表格各列的含意如下:
第一列:磁盘分区名/卷标,一般是/dev/sdaN(N表示正整数)
第二列:挂载点,我们在这里把/dev/sda1挂到/samba上。
第三列:缺省设置,一般用defautls。
第四列:是否备份:0&&表示不做 dump 备份;1&&表示要将整个 &fie sysytem& 里的内容备份;2 也表示要做 dump 备份,但该分区的重要性比 1 小。
第五列:检测顺序:0&&不进行检测;根分区(/),必须填写 1,其它的都不能填写 1。如果有分区填写大于 1 的话,则在检查完根分区后,从小到大依次检查下去。
具体填写方法在图中已注明。
4、安装samba
更新一下源:
sudo apt-get update
sudo apt-get install samba samba-common-bin
安装完成后,配置/etc/samba/smb.conf文件
在其最后添加以下命令:
#================================================
#转载请注明:@小五义
[share]&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& #共享文件的名称,将在网络上以此名称显示 &&&&&&& path = /samba&&&&&&&&&&&&&&&&&&&& #共享文件的路径 &&&&&&& valid users = root pi&&&&&&&&&&&& #允许访问的用户,这里我用的是root 和 pi 两个用户 &&&&&&& browseable = yes&&&&&&&&&&&&&&&&& #允许浏览&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&& public = yes&&&&&&&&&&&&&&&&&&&&& #共享开放&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&& writable = yes&&&&&&&&&&&&&&&&&&& #可写
#================================================
保存后,重启samba服务,输入
/etc/init.d/samba restart
最后添加共享用户:
smbpasswd &a pi& #这里我用的pi。
设置开机自启动,编辑/etc/rc.loca,如下
5、测试samba安装效果
在windows计算机上,打开我的电脑,在左下角网络点右键,选映射网络驱动器
点击完成会提示输入用户名和密码,这里输入设置的共享用户名和密码。
最后在计算机下会出现共享的文件夹,点开文件夹,新建test.txt文件进行一下测试,如果能正常建立,就说明ok了,如果不行,应该是权限问题,可再重新设置一下/samba文件夹权限。这里注意,如果在/samba文件夹下新建新的文件夹,也需要设置权限,可以用vnc连接后,用管理员浏览,点右键设置文件夹权限为read and write,也可以用chmod命令设置。
四、安装DLNA实现流媒体服务器
DLNA主要面向媒体资源(比如视频、音乐)实现网内共享,具体步骤如下:
1、安装minidlna
更新一下安装源
sudo apt-get update
安装minidlna
sudo apt-get install minidlna
2、设置配置文件
设置/etc/minidlna.conf文件,在文件尾部添加如下内容:
#===================================================================================
#转载请注明:@小五义&& QQ群:media_dir=A,/samba/DLNA/Music&&&&&&&&&&&&&&& #A表示这个目录是存放音乐的,当minidlna读到配置文件时,它会自动加载这个目录下的音乐文件 media_dir=P,/samba/DLNA/Picture&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& media_dir=V,/samba/DLNA/Video&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& db_dir=/samba/DLNA/db&&&&&&&&&&&&&&&&&&&&&& #配置minidlna的数库数据的存放目录 log_dir=/samba/DLNA/log&&&&&&&&&&&&&&&&&&&& #配置日志目录 #=======================================================================================
3、建立文件夹
在/samba文件夹下,建立以上文件夹,并设置好权限为read and write。
4、重启minidlna
/etc/init.d/minidlna restart
/etc/init.d/minidlna status
返回如下结果为正常。
5、在电脑上进行播放
先在树莓派以上对应的video等文件夹内存上一些文件(可利用samba直接从电脑上考入),然后返回到计算机进行操作。
点击我的电脑下面的网络,出现媒体设备
双击进入媒体播放器,在左边的列表栏下方其它媒体库中出现raspberrypi:root,点击后,可选择音乐,视频等。
这时双击就可以欣赏了。
6、手机上进行播放
手机上实现网络共享,可安装es file explorer软件,在其网络处进行设置,设置方法与电脑基本一样,这里不再详述。设置后,文件均可浏览,媒体文件双击可以在线播放。
也可以直接使用updp播放器,这里我安装的是moliplayer,可以在其附近设备里,直接找到raspberrypi:root,访问其媒体问题,注意,这里是访问的DLNA共享,所以不需要再输入密码。
7、智能电视进行播放
智能电视一般都是用的android系统,与手机基本一样。
五、安装aria2实现下载机功能
1、安装aria2
更新一下安装源
sudo apt-get update
sudo apt-get install aria2
2、创建配置文件
在/etc目录下创建aria2目录用来存放配置文件:
sudo mkdir /etc/aria2
创建空白的aria2.session文件:
sudo touch /etc/aria2/aria2.session
创建配置文件
sudo nano /etc/aria2/aria2.conf
在该文件中输入以下内容:
#=========文件保存目录自行修改 dir=/samba disable-ipv6=true #打开rpc的目的是为了给web管理端用 enable-rpc=true rpc-allow-origin-all=true rpc-listen-all=true #rpc-listen-port=6800 continue=true input-file=/etc/aria2/aria2.session save-session=/etc/aria2/aria2.session max-concurrent-downloads=3
这里为了方便共享,我直接设置将文件下载到samba共享文件夹。
3、启动aria2
sudo aria2c --conf-path=/etc/aria2/aria2.conf
如果没有提示任何错误信息,那就按ctrl+c停止上面的语句,转为后台运行:
sudo aria2c --conf-path=/etc/aria2/aria2.conf -D
同时其此句写到开机启动中,编辑/etc/rc.loca,如下
4、安装appache
&&&&&&& 为了能web管理aria2进行下载,需要安装yaaw和apache环境。
安装appach
sudo apt-get install apache2
修改/var/www的权限
chmod 777 /var/www
5、安装yaaw
&&&&&&& 从下载yaaw,点击右下角的 ,下载后将解压后的文件夹内内容拷贝到/var/www文件夹下。这时输入树莓派IP,如果出现以下页面,则表示已经正常工作了。
这里可以点add添加下载任务,具体方法不再详述。
6、实现迅雷的离线下载
&&&&&&& 很多网站都介绍了aria2实现迅雷离线下载的方法,这里也做一下描述。我以firefox浏览器为例,chrome浏览器本身有一个迅雷离线增加插件,可以从进行安装,安装后就和firefox基本一样了。
在firefox里添加一个书签:
===========================================================
名称为:ThunderLixianExporter
地址为:javascript:void((function(){var d=var s=d.createElement('script');s.src='http://s.binux.me/tle.js';s.id='TLE_script';d.body.appendChild(s)})())
==================================================================
登录迅雷离线网站:lixian.xunlei.com,登录后,点一下书签中的ThunderLixianExporter,然后点击迅雷页面右上角的配置按钮(小齿轮)。
在上面的窗口中填写aria2.json-RPC Path,这个值来自于yaaw那个页面,具体方法是,输入树莓派IP显示yaaw页面,点击右上的配置图标,如下图
在set页面中存在该值:
保存好后,在离线页面的每行记录的取回本地后面会出现一个下拉菜单,选择yaaw就会直接添加到yaaw任务中了。
到此,树莓派的NAS服务器搭建完成,试了一下效果,还是很满意的。
六、制作外壳
&&&&&&& 直接从家里找了一个orico的包装盒,大小正好合适,而且外壳比较硬,外观也比较不错。
2、加装1602显示屏
&&&&&&& 加装一个1602显示屏,目的是显示时间和CPU温度,当然也可以显示其它内容,我这里只显示了这两项。这里还需要加装一个电位器(也就是可变电阻,如果没有,可以加一个10K的电阻)
(1)1602硬件连接
1602共16个端口,只用其中12个,具体接法如下:
LCD1602液晶屏模块提供了16个引脚,我们只需接其中的12个即可:
VDD,接5V电源
VO,液晶对比度调节,接电位器中间的引脚,电位器两边的引脚分别接5V和接地。
RS,寄存器选择,接GPIO14
RW,读写选择,接地,表示写模式
EN,使能信号,接GPIO15
D0,数据位0,4位工作模式下不用,不接
D1,数据位1,4位工作模式下不用,不接
D2,数据位2,4位工作模式下不用,不接
D3,数据位3,4位工作模式下不用,不接
D4,数据位4,接GPIO17
D5,数据位5,接GPIO18
D6,数据位6,接GPIO27
D7,数据位7,接GPIO22
A,液晶屏背光+,接5V
K,液晶屏背光-,接地
注意:1、这里的VSS、VDD等在有些1602的板子上会标明,有些则只标了数字,如一端写着1,一端写着16,1对应的就是VSS端,16对应的就是K端,因此依次连接就可以了。
&&&&&&& 2、GPIO各端口及5V、接地等端口见下图,因为我用的是B+的板了,因此这里的图也是B+的端口图。
&&&&&&& 3、连接通电后,1602会亮起,其中一行为黑色方格,一行什么也不显示,如果全不显示,可调节一下电位器
对于1602板子的操作,已经有人做了一个示例,这样用起来就比较简单了。示例代码下载地址:https://github.com/lifanxi/rpimenu.git,解压后有Adafruit_CharLCD.py文件,此文件在LCD上会显示两行字符:LCD 1602 Test, ABCDEF。这里只需要在此文件上进行一下修改就可以了。
#!/usr/bin/python
#转载请注明:@小五义&& QQ群:
# based on code from lrvick and LiquidCrystal
# lrvic - https://github.com/lrvick/raspi-hd44780/blob/master/hd44780.py
# LiquidCrystal - https://github.com/arduino/Arduino/blob/master/libraries/LiquidCrystal/LiquidCrystal.cpp
#from time import sleep
import time,os
class Adafruit_CharLCD:
# commands
LCD_CLEARDISPLAY
LCD_RETURNHOME
LCD_ENTRYMODESET
LCD_DISPLAYCONTROL
LCD_CURSORSHIFT
LCD_FUNCTIONSET
LCD_SETCGRAMADDR
LCD_SETDDRAMADDR
# flags for display entry mode
LCD_ENTRYRIGHT
LCD_ENTRYLEFT
LCD_ENTRYSHIFTINCREMENT
LCD_ENTRYSHIFTDECREMENT
# flags for display on/off control
LCD_DISPLAYON
LCD_DISPLAYOFF
LCD_CURSORON
LCD_CURSOROFF
LCD_BLINKON
LCD_BLINKOFF
# flags for display/cursor shift
LCD_DISPLAYMOVE
LCD_CURSORMOVE
# flags for display/cursor shift
LCD_DISPLAYMOVE
LCD_CURSORMOVE
LCD_MOVERIGHT
LCD_MOVELEFT
# flags for function set
LCD_8BITMODE
LCD_4BITMODE
LCD_5x10DOTS
LCD_5x8DOTS
def __init__(self, pin_rs=14, pin_e=15, pins_db=[17, 18, 27, 22], GPIO = None):
# Emulate the old behavior of using RPi.GPIO if we haven't been given
# an explicit GPIO interface to use
if not GPIO:
import RPi.GPIO as GPIO
GPIO.setwarnings(False)
self.GPIO = GPIO
self.pin_rs = pin_rs
self.pin_e = pin_e
self.pins_db = pins_db
self.GPIO.setmode(GPIO.BCM)
self.GPIO.setup(self.pin_e, GPIO.OUT)
self.GPIO.setup(self.pin_rs, GPIO.OUT)
for pin in self.pins_db:
self.GPIO.setup(pin, GPIO.OUT)
self.write4bits(0x33) # initialization
self.write4bits(0x32) # initialization
self.write4bits(0x28) # 2 line 5x7 matrix
self.write4bits(0x0C) # turn cursor off 0x0E to enable cursor
self.write4bits(0x06) # shift cursor right
self.displaycontrol = self.LCD_DISPLAYON | self.LCD_CURSOROFF | self.LCD_BLINKOFF
self.displayfunction = self.LCD_4BITMODE | self.LCD_1LINE | self.LCD_5x8DOTS
self.displayfunction |= self.LCD_2LINE
""" Initialize to default text direction (for romance languages) """
self.displaymode =
self.LCD_ENTRYLEFT | self.LCD_ENTRYSHIFTDECREMENT
self.write4bits(self.LCD_ENTRYMODESET | self.displaymode) #
set the entry mode
self.clear()
def begin(self, cols, lines):
if (lines & 1):
self.numlines = lines
self.displayfunction |= self.LCD_2LINE
self.currline = 0
def home(self):
self.write4bits(self.LCD_RETURNHOME) # set cursor position to zero
self.delayMicroseconds(3000) # this command takes a long time!
def clear(self):
self.write4bits(self.LCD_CLEARDISPLAY) # command to clear display
self.delayMicroseconds(3000) # 3000 microsecond sleep, clearing the display takes a long time
def setCursor(self, col, row):
self.row_offsets = [ 0x00, 0x40, 0x14, 0x54 ]
if ( row & self.numlines ):
row = self.numlines - 1 # we count rows starting w/0
self.write4bits(self.LCD_SETDDRAMADDR | (col + self.row_offsets[row]))
def noDisplay(self):
""" Turn the display off (quickly) """
self.displaycontrol &= ~self.LCD_DISPLAYON
self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol)
def display(self):
""" Turn the display on (quickly) """
self.displaycontrol |= self.LCD_DISPLAYON
self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol)
def noCursor(self):
""" Turns the underline cursor on/off """
self.displaycontrol &= ~self.LCD_CURSORON
self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol)
def cursor(self):
""" Cursor On """
self.displaycontrol |= self.LCD_CURSORON
self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol)
def noBlink(self):
""" Turn on and off the blinking cursor """
self.displaycontrol &= ~self.LCD_BLINKON
self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol)
def noBlink(self):
""" Turn on and off the blinking cursor """
self.displaycontrol &= ~self.LCD_BLINKON
self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol)
def DisplayLeft(self):
""" These commands scroll the display without changing the RAM """
self.write4bits(self.LCD_CURSORSHIFT | self.LCD_DISPLAYMOVE | self.LCD_MOVELEFT)
def scrollDisplayRight(self):
""" These commands scroll the display without changing the RAM """
self.write4bits(self.LCD_CURSORSHIFT | self.LCD_DISPLAYMOVE | self.LCD_MOVERIGHT);
def leftToRight(self):
""" This is for text that flows Left to Right """
self.displaymode |= self.LCD_ENTRYLEFT
self.write4bits(self.LCD_ENTRYMODESET | self.displaymode);
def rightToLeft(self):
""" This is for text that flows Right to Left """
self.displaymode &= ~self.LCD_ENTRYLEFT
self.write4bits(self.LCD_ENTRYMODESET | self.displaymode)
def autoscroll(self):
""" This will 'right justify' text from the cursor """
self.displaymode |= self.LCD_ENTRYSHIFTINCREMENT
self.write4bits(self.LCD_ENTRYMODESET | self.displaymode)
def noAutoscroll(self):
""" This will 'left justify' text from the cursor """
self.displaymode &= ~self.LCD_ENTRYSHIFTINCREMENT
self.write4bits(self.LCD_ENTRYMODESET | self.displaymode)
def write4bits(self, bits, char_mode=False):
""" Send command to LCD """
self.delayMicroseconds(1000) # 1000 microsecond sleep
bits=bin(bits)[2:].zfill(8)
self.GPIO.output(self.pin_rs, char_mode)
for pin in self.pins_db:
self.GPIO.output(pin, False)
for i in range(4):
if bits[i] == "1":
self.GPIO.output(self.pins_db[::-1][i], True)
self.pulseEnable()
for pin in self.pins_db:
self.GPIO.output(pin, False)
for i in range(4,8):
if bits[i] == "1":
self.GPIO.output(self.pins_db[::-1][i-4], True)
self.pulseEnable()
def delayMicroseconds(self, microseconds):
seconds = microseconds / float(1000000) # divide microseconds by 1 million for seconds
time.sleep(seconds)
def pulseEnable(self):
self.GPIO.output(self.pin_e, False)
self.delayMicroseconds(1)
# 1 microsecond pause - enable pulse must be & 450ns
self.GPIO.output(self.pin_e, True)
self.delayMicroseconds(1)
# 1 microsecond pause - enable pulse must be & 450ns
self.GPIO.output(self.pin_e, False)
self.delayMicroseconds(1)
# commands need & 37us to settle
def message(self, text):
""" Send string to LCD. Newline wraps to second line"""
for char in text:
if char == '\n':
self.write4bits(0xC0) # next line
self.write4bits(ord(char),True)
if __name__ == '__main__':
lcd = Adafruit_CharLCD()
lcd.clear()
cputemp=os.popen('vcgencmd measure_temp').readline()
sumcputemp=cputemp.replace("temp=","CPU:").replace("'C\n","")
lcdout=time.strftime('%Y-%m-%d %H:%M',time.localtime(time.time()))+"\n"+sumcputemp
lcd.message(lcdout)
time.sleep(30)
3、开面自启动上面的程序
&&&&&&& 将以上文件命名为1602.py,保存在/home/pi下面,修改/etc/rc.loca,添加上sudo python /home/pi/1602/py。树莓派开机时,插上电源,当1602能正常显示CPU温度时,表示机器已经启动完成,各项功能可正常使用。
4、一些其它的想法
(1)本想再加装一个风扇用来散热,结果手上没有3.3V的风扇了,所以就没加。感兴趣的朋友可以自己加一下,因为树莓派输出为3.3V,所以最好是直接买3.3V的,如果买5V的,就一定要带个3.3V的继电器,要不没法对风扇控制。如果风扇一直常开那就无所谓了,5V就可以,直接接正负级。我原本的想法是CPU上了50度,风扇再运转,这样可以降温,同时噪音也不会大。
(2)这个家庭服务器搭建起来以后,后面还有很多文章可做,比如可以依托他建立家庭监控系统,装上两个摄像头什么的,也可以做一些外网访问的设置,这样就可以直接从外网进行操作了。
[参考文献]
1、树莓派变身Aria2下载服务器: 2、树莓派搭建NAS服务器: 3、DIY一套NAS+私有云盘+下载机: 4、树莓派变身Aria2下载服务器:
5、打造增强型Raspberry Pi-液晶屏篇http://www.freemindworld.com/blog/_raspberry_pi_with_lcd.shtml
阅读(...) 评论()404 Not Found
404 Not Found&&&& 视频播放器这个做开发的兄弟们应该都熟悉,现在的视听网站这么火热,流媒体技术也相当成熟,网上的介绍也很多。不过基本上流媒体播放器都是flash,大多是写AactionScript脚本开发,利用FLEX开发也比较方便,和VS.NET的开发环境一样,看起来也熟悉,开发起来也有感觉些,我想至少应该比写AS脚本要有感觉些,当然FLEX开发的应用程序最终也会被解析成AS脚本,生成SWF文件,供WEB页面嵌入调用。最近稍微空闲那么一点,从同事那拷了个FLEX4.0,装上感觉下,之前也有意想做个流媒体播放器,正好这段时间有研究下。严格来说单纯的播放器不会难做,网上也有很多例子,只是流媒体播放器只支持流格式的媒体文件,所有这里还有个媒体格式转换的问题,就是要把不同类型的视频格式转换成流格式的文件,即转换成视频流格式。我写的这篇暂时只说说流媒体播放器的开发,不涉及转换的问题,这个有时间研究下再说说。
&&&& 利用FLEX开发视频播放器可以利用自带的组件VideoDisplay,也可以不用,最终两种方式开发出来的效果是可以一样的。我下面说的主要是不利用组件的开发方式,利用组件开发的后面我也贴下代码片段和截图。主要以开发完后的开发文档内容来说下,写的内容不多,基本上要点应该还是写清楚了,先看下目录,按目录顺序讲解:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Internet(.flv Adobe.f4v)
Video Streaming 2
Adobe公司为了迎接高清时代而推出继FLV格式后的支持H.264的F4V流媒体格式。
  它和FLV主要的区别在于,FLV格式采用的是H263编码,而F4V则支持H.264编码的高清晰视频,码率最高可达50Mbps。
Flex4.0flash <st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year=".0
最大值为1)
&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&
&&& 点开视频播放页面后首先初始化视频播放的画面,根据接收的用户参数初始化视频画面的大小。
& 对象定义:
&&&&&&&&&&&
&初始化方法如下:
videoUrl = parameters.videoU
videoWidth = parameters.videoW
videoHeight = parameters.videoHeight&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&video =
uic.addChild(video);
&& xmlns:s="
&& xmlns:mx="="startVideo()"&
nc.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler);&
nc.connect(
.connect(可使用null作为参数以便从本地文件系统或 Web 服务器中播放视频和 MP3 文件。
metaDataObj.onMetaData =
ns.client = metaDataO
video.attachNetStream(ns);
ns.play(videoUrl);
soundProcess.value = _
soundTrans.volume = _volume
ns.soundTransform = soundT
ns.addEventListener(NetStatusEvent.NET_STATUS,NetStreamStatusHandler);或其它状态)后的监听事件
ns.pause();
btnPlay.source = playC&
&&&&&&&&&&& btnPlay.source = pauseC&
totalTime = obj.
fileSize = (obj.filesize/()).toFixed(2).toString()+
&ns.addEventListener(NetStatusEvent.NET_STATUS,NetStreamStatusHandler);
playTime = ns.// ns.time
bufferRect.width = ns.bytesLoaded / ns.bytesTotal*(playProcess.width-10);滑块本身也有一定的宽度,减去约10个像素宽度)
}&&&&&&&&&&&&&&
&& playTime
&& ),ns.bytesTotal为流媒体的总大小,通过比例计算(当缓冲达到100%时,即缓冲完毕时,缓冲条的长度和播放进度条等长(除去滑块宽度)。缓冲方框可以是一个
&&& 页面所有的控件和标签如下:
&mx:Image&source="{playClass}"&click="play();"&id="btnPlay"&buttonMode="true"&x="<span style="color: #"&y="<span style="color: #3"/&&&&&&&&mx:UIComponent&id="uic"&height="<span style="color: #0"&width="<span style="color: #0"&click="play()"&doubleClickEnabled="true"&doubleClick="display()"&buttonMode="true"&y="<span style="color: #"&x="<span style="color: #"/&&&&&&&s:BorderContainer&x="<span style="color: #"&y="<span style="color: #1"&width="<span style="color: #"&height="<span style="color: #"&id="bufferRect"&buttonMode="true"&borderColor="#70b2ee"&backgroundColor="#70b2ee"&&&&&&/s:BorderContainer&&&&&&mx:Label&text="{formatTime(playTime)}/{formatTime(totalTime)}&&&&&&&&&&&&&&&&&&&&{fileSize}"&width="<span style="color: #0"&x="<span style="color: #"&y="<span style="color: #7"/&&&&&&mx:HSlider&id="playProcess"&&minimum="<span style="color: #"&value="{playTime}"&maximum="{totalTime}"&change="play_onchange(event)"&thumbPress="thumbPress();"&&thumbRelease="thumbRelease();"&&&&&&&&&&&&&&&&alpha="<span style="color: #.5"&&&&dataTipFormatFunction="dataTipFormat"&buttonMode="true"&showTrackHighlight="true"&x="<span style="color: #"&y="<span style="color: #8"&width="<span style="color: #0"/&&&&&&&&&&mx:Image&source="{sound1}"&click="closeSound();"&id="soundImg"&buttonMode="true"&x="<span style="color: #4"&y="<span style="color: #1"/&&&&&&mx:HSlider&id="soundProcess"&x="<span style="color: #6"&y="<span style="color: #0"&&minimum="<span style="color: #"&maximum="<span style="color: #"&change="sound_thumbChanges(event)"&&&&&&&&&&&&&&&&&&showTrackHighlight="true"&dataTipFormatFunction="SoundTipFormat"&&&buttonMode="true"&&width="<span style="color: #5"/&&&&&&&&mx:Button&label="全屏"&click="display();"&buttonMode="true"&cornerRadius="<span style="color: #"&labelPlacement="right"&paddingLeft="<span style="color: #"&x="<span style="color: #1"&y="<span style="color: #3"/&&&&&&mx:SWFLoader&id="load"&x="<span style="color: #"&y="<span style="color: #6"/&
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&& pause()resume()
ns.resume();
btnPlay.source = pauseC
ns.pause();
btnPlay.source = playC
&&&&& seek()
playProcess.value = 0;&
playPosition = playProcess.&&&&&&&&&&&&
ns.seek(playPosition);
ns.pause();&
指拖动时滑块时鼠标弹起&
ns.resume();
ns.seek(0);
btnPlay.source = playC&
ns.pause();
&&&&& SoundTransform 类操作,该类包含音量和平移的属性。如果禁音后运行调节滑块的话,需要再定义一个临时变量
soundImg.source =&
tmpSound= ns.soundT
soundTrans.volume = 0;
ns.soundTransform = soundT这样不行,需要用对象赋值
&&&&&&& {&
soundImg.source = sound1;&
ns.soundTransform = tmpS&
tmpSound.volume = soundProcess.
ns.soundTransform = tmpS&
&&&&& flashstage, 43854241691610 ()display()
stage.fullScreenSourceRect =
stage.displayState =StageDisplayState.FULL_SCREEN;&
isFullScreen =
&&& stage.displayState = StageDisplayState.NORMAL;&
isFullScreen =
(data*100).toFixed(0).toString()+
video.smoothing = true;&&&&&&&&&&&&&
FLEX.swfhtmlaspxFlexJSswfobject.js
var swfVersionStr = "<st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year=".0";
var xiSwfUrlStr = "playerProductInstall.swf";
var flashvars = {};
flashvars.videoUrl = "S6000103.flv";
flashvars.videoWidth = "640";
flashvars.videoHeight = "400";
flashvars.videoVolumn = "0.6";
flashvars.isAutoPlay = "true";
var params = {};
params.quality = "high";
params.bgcolor = "#ffffff";
params.allowscriptaccess = "sameDomain";
params.allowfullscreen = "true";
var attributes = {};
attributes.id = "FLVPlayer";
attributes.name = "FLVPlayer";
attributes.align = "middle";
swfobject.embedSWF(
"FLVPlayer.swf", "flashContent",
"650", "450",
swfVersionStr, xiSwfUrlStr,
flashvars, params, attributes);
播放器文件(头进行如下设置(添加.flv和.f4v扩展名):
&?xml&version="<span style="color: #.0"&encoding="utf-8"?&&s:Application&xmlns:fx="http://ns.adobe.com/mxml/2009"&&&&&&&&&&&&&&&&xmlns:s="library://ns.adobe.com/flex/spark"&&&&&&&&&&&&&&&&xmlns:mx="library://ns.adobe.com/flex/mx"&fontSize="<span style="color: #"&initialize="init();"&backgroundAlpha="<span style="color: #.6"&backgroundColor="#FFFFFF"&&&&&&fx:Declarations&&&&&&&&&&!--&将非可视元素(例如服务、值对象)放在此处&--&&&&&&/fx:Declarations&&&&&&fx:Script&&&&&&&&&&&&![CDATA[&&&&&&&&&&&&import&mx.controls.A&&&&&&&&&&&&import&mx.events.MetadataE&&&&&&&&&&&&import&mx.events.SliderE&&&&&&&&&&&&import&mx.controls.sliderClasses.S&&&&&&&&&&&&&import&mx.events.VideoE&&&&&&&&&&&&import&mx.utils.ObjectU&&&&&&&&&&&&import&mx.controls.ProgressBarD&&&&&&&&[Embed(source="images/play.png")]&&&&&&&&&&[Bindable]&&&&&&&&&&private&var&playClass:C&&&&&&&&&&&&&&&&//播放图标样式&&&&&&&&&&&&&&&&&&[Embed(source="images/pause.png")]&&&&&&&&&&[Bindable]&&&&&&&&&&private&var&pauseClass:C&&&&&&&&&&&&&&&//暂停图标样式&&&&&&&&&&&&&&&&&&[Embed(source="images/sound1.png")]&&&&&&&&&&[Bindable]&&&&&&&&&&private&var&sound1:C&&&&&&&&&&&&&&&//声音样式1&&&&&&&&&&&&&&&&&&[Embed(source="images/sound.png")]&&&&&&&&&&[Bindable]&&&&&&&&&&private&var&sound:C&&&&&&&&&&&&&&&&//声音样式2(静音)&&&&&&&&&&&&&&&&&&[Bindable]&&&&&&&&&&private&var&videoSource:S&&&&&&&&&//媒体路径&&&&&&&&&&&&&&&&&&private&var&isPause:Boolean&=&false;&&&&&&&&//暂停状态&&&&&&&&&&private&var&isSound:Boolean&=&true;&&&&&&&&&//声音状态&&&&&&&&&&private&var&isFullScreen:Boolean&=&false;&&&//是否是全屏&&&&&&&&&&private&var&tmpSound:Number&=&<span style="color: #;&&&&&&&&&&&&//临时声音大小&&&&&&&&&&&&&&&&&&&&&&[Bindable]&&&&&&&&&&private&var&fileSize:S&&&&&&&&&&&&&&&&&//视频文件大小&&&&&&&&&&&&&&&&&&&&[Bindable]&&&&&&&&&&private&var&playPosition:N&&&&&&&&&&&&//播放进度&&&&&&&&&&&&&&&&&&&private&function&init():void{&&&&&&&&&&&&&&videoSource&=&parameters.&&&&&&&&&&}&&&&&&&&&&&&&&&&&&private&function&playingMove(event:VideoEvent):void{&&&&&&&&&&&&&&my_hs.value&=&myVid.playheadT&&//视频播放时同步进度条状态值&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&//拖动进度条时改变播放位置&&&&&&&&&&private&function&hs_onchange(event:SliderEvent):void{&&&&&&&&&&&&&&if(myVid.playheadTime&==&-<span style="color: #){&&&&&&&&&&&&&&&&&&my_hs.value&=&<span style="color: #;&&&&&&&&&&&&&&&&&&return;&&&&&&&&&&&&&&}&&&&&&&&&&&&&&playPosition&=&my_hs.&&&&&&&&&&&&&//保正播放进度統一&&&&&&&&&&&&&&myVid.playheadTime&=&playP&&&&&&&&&}&&&&&&&&&&&&&&&&&&//进度条鼠标按下&&&&&&&&&&private&function&thumbPress():void{&&&&&&&&&&&&&&myVid.pause();&&&&&&&&&&}&&&&&&&&&&//进度条鼠标弹起&&&&&&&&&&private&function&thumbRelease():void{&&&&&&&&&&&&&&myVid.playheadTime&=&playP&&&&&&&&&&&&&&myVid.play();&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&//播放,暂停&&&&&&&&&&private&function&playButton():void{&&&&&&&&&&&&&&if(!isPause){&&&&&&&&&&&&&&&&&&myVid.play();&&&&&&&&&&&&&&&&&&playBtn.source&=&pauseC&&&&&&&&&&&&&&&&&&isPause&=&true;&&&&&&&&&&&&&&}else{&&&&&&&&&&&&&&&&&&myVid.pause();&&&&&&&&&&&&&&&&&&playBtn.source&=&playC&&&&&&&&&&&&&&&&&&isPause&=&false;&&&&&&&&&&&&&&}&&&&&&&&&&}&&&&&&&&&&&&&&&&&&//播放完成&&&&&&&&&&private&function&vidComplete():void{&&&&&&&&&&&&&&playBtn.source&=&playC&&&&&&&&&&&&&&isPause&=&false;&&&&&&&&&&}&&&&&&&&&&&&&&&&&&//停止播放&&&&&&&&&&private&function&stopButton():void{&&&&&&&&&&&&&&myVid.stop();&&&&&&&&&&&&&&playBtn.source&=&playC&&&&&&&&&&&&&&isPause&=&false;&&&&&&&&&&}&&&&&&&&&&&&&&&&&&//切換全屏顯示&&&&&&&&&&private&function&display():void{&&&&&&&&&&&&&&if(!isFullScreen){&&&&&&&&&&&&&&&&&&stage.fullScreenSourceRect&=&new&Rectangle(myVid.x,myVid.y,myVid.width,myVid.height);&&&&&&&&&&&&&&&&stage.displayState&=StageDisplayState.FULL_SCREEN;&&&&&&&&&&&&&&&&&&isFullScreen&=&true;&&&&&&&&&&&&&&}else{&&&&&&&&&&&&&&&&&&stage.displayState&=&StageDisplayState.NORMAL;&&&&&&&&&&&&&&&&&&isFullScreen&=&false;&&&&&&&&&&&&&&}&&&&&&&&&&}&&&&&&&&&&&&&&&&&&//调整声音&&&&&&&&&&private&function&sound_thumbChanges(event:SliderEvent):void{&&&&&&&&&&&&&&myVid.volume&=&hs_sound.&&&&&&&&&&}&&&&&&&&&&&&&&&&&&//静音&&&&&&&&&&private&function&closeSound():void{&&&&&&&&&&&&&&if(isSound){&&&&&&&&&&&&&&&&&&closeImg.source&=&&&&&&&&&&&&&&&&&&&tmpSound&=&myVid.&&&&&&&&&&&&&&&&&&myVid.volume&=&<span style="color: #;&&&&&&&&&&&&&&&&&&isSound&=&false;&&&&&&&&&&&&&&}else{&&&&&&&&&&&&&&&&&&closeImg.source&=&sound1;&&&&&&&&&&&&&&&&&&myVid.volume&=&tmpS&&&&&&&&&&&&&&&&&&isSound&=&true;&&&&&&&&&&&&&&}&&&&&&&&&&}&&&&&&&&&&&&&&&&&&//格式化时间&&&&&&&&&&private&function&formatTime(time:Number):String{&&&&&&&&&&&&&&var&min:Number&=&Math.floor(time/<span style="color: #);&&&&&&&&&&&&&&var&sec:Number&=&Math.floor(time%<span style="color: #);&&&&&&&&&&var&timeResult:String&=&(min&&&<span style="color: #&?&"<span style="color: #"+min.toString()&:&min.toString())&+&":"&+&(sec&==&<span style="color: #&?&"<span style="color: #"+sec.toString()&:&sec.toString());&&&&&&&&&&return&timeR&&&&&&&&&&}&&&&&&&&&&//slider格式化&&&&&&&&&&private&function&dataTipFormat(data:Number):String{&&&&&&&&&&&&&&return&formatTime(data);&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&private&function&myVid_metadataReceived(evt:MetadataEvent):void&{&&&&&&&&&&&&var&meta:Object&=&evt.&//&视频的元数据信息&&&&&&&&&&&&fileSize&=&(meta.filesize/(<span style="color: #24*<span style="color: #24)).toFixed(<span style="color: #).toString()+"MB";//换算成兆字节并保留两位小数&&&&&&&&&&&&&/*&读取所有元数据属性和值&&&&&&&&&&&&var&i:int&=&0;&&&&&&&&&&&&var&arr:Array&=&[];&&&&&&&&&&&&var&item:S&&&&&&&&&&&&&var&value:*;&&&&&&&&&&&&for&(item&in&meta)&{&&&&&&&&&&&&&&&&if&(ObjectUtil.isSimple(meta[item]))&{&&&&&&&&&&&&&&&&&&&&if&(meta[item]&is&Array)&{&&&&&&&&&&&&&&&&&&&&&&&&value&=&"[Array]";&&&&&&&&&&&&&&&&&&&&}&else&{&&&&&&&&&&&&&&&&&&&&&&&&value&=&meta[item]&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Alert.show(item+":"+value);&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&}*/&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&]]&&&&&&&&&&&&&&&&&&&&&&&&&/fx:Script&&&&&&&&&&&&s:BorderContainer&borderColor="#66ccff"&y="<span style="color: #"&cornerRadius="<span style="color: #"&borderWeight="<span style="color: #"&borderVisible="true"&dropShadowVisible="false"&x="<span style="color: #"&width="<span style="color: #0"&&&&&&&&&&&&&&&&&&mx:VideoDisplay&id="myVid"&y="<span style="color: #"&height="<span style="color: #0"&width="<span style="color: #0"&&source="{videoSource}"&&autoPlay="false"&&buttonMode="true"&&click="playButton();"&&ready="myVid.visible&=&"&metadataReceived="myVid_metadataReceived(event);"&&&&&&&&&&playheadUpdate="playingMove(event)"&&complete="vidComplete();"&&doubleClickEnabled="true"&&doubleClick="display();"&contentBackgroundAlpha="<span style="color: #.0"&contentBackgroundColor="#000000"&x="<span style="color: #"&&&&&&&&&/&&&&&&&&&&&&&&&&&&&&mx:HBox&width="<span style="color: #0"&verticalAlign="middle"&x="<span style="color: #"&y="<span style="color: #5"&height="<span style="color: #"&&&&&&&&&&&&&&&&mx:Image&source="{playClass}"&click="playButton();"&id="playBtn"&buttonMode="true"/&&&&&&&&&&&&&&&&mx:Label&text="{formatTime(myVid.playheadTime)}/{formatTime(myVid.totalTime)}&&&&&&&&&&&&&&&&&&&&{fileSize}"&width="<span style="color: #0"/&&&&&&&&&&&&&&mx:HRule&height="<span style="color: #"&width="<span style="color: #0"&buttonMode="true"/&&&&&&&&&&&&&&&mx:Image&source="{sound1}"&click="closeSound();"&id="closeImg"&buttonMode="true"/&&&&&&&&&&&&&&&&mx:HSlider&width="<span style="color: #0"&id="hs_sound"&minimum="<span style="color: #"&maximum="<span style="color: #"&&&&&&&&&&&&&&&&&&&&&&&&&&&&change="sound_thumbChanges(event)"&&&&&&&&&&&&&&&&&&&&&&&&&&value="{myVid.volume}"&buttonMode="true"&/&&&&&&&&&&&&&&&&mx:Button&label="全屏"&click="display();"&buttonMode="true"&cornerRadius="<span style="color: #"&labelPlacement="right"&paddingLeft="<span style="color: #"/&&&&&&&&&&&&/mx:HBox&&&&&&&&&&&&mx:HSlider&width="<span style="color: #0"&id="my_hs"&minimum="<span style="color: #"&maximum="{myVid.totalTime}"&height="<span style="color: #"&showTrackHighlight="true"&buttonMode="true"&liveDragging="true"&&&&&&&&&&&&&&&&&&&&change="hs_onchange(event)"&thumbPress="thumbPress();"&&thumbRelease="thumbRelease();"&x="<span style="color: #"&y="<span style="color: #2"&&dataTipFormatFunction="dataTipFormat"&/&&&&&&&&&&&&&&&/s:BorderContainer&&/s:Application&
效果图如下:
可以对比下平滑处理过的效果,明显文字更清晰些,尤其在全屏后效果更明显,平滑处理后基本不会有画面失真的现象。
阅读(...) 评论()}

我要回帖

更多关于 流媒体后视镜是什么 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信