1. 程式人生 > >MiniDLNA 1.2.1編譯 新增對rmvb格式的支援

MiniDLNA 1.2.1編譯 新增對rmvb格式的支援

因為電視為安卓系統,螢幕大,所以看電影時喜歡在TV上看,之前都是PC端通過samba(網路上的芳鄰)來分享視訊,但在TV上觀看時,在多人同時用上網時偶爾會卡頓,體驗不怎麼好。所以就想換個方式來共享視訊,所以就選定DLNA了。

Windows:

Windows Media Player----即DLNA服務端又為DLNA客戶端,可直接推送視訊至TV上,當時系統為Win7,XP的MediaPlayer就不清楚了

AirPlay(官方網站)----DLNA服務端,這款軟體可以直接將電腦桌面推送至TV上(帶聲音),效果同雙顯示器,發現它後就再也沒有使用過HDMI線連線TV了。也可以單獨推送視訊/圖片/音樂至TV上

之後一段時間,PPTV、迅雷視訊、騰訊視訊等等播放軟體都開始支援DLNA了,現在因工作需要已經轉至Linux了,所以不怎麼玩Windows了,這些軟體的DLNA功能怎麼樣不太清楚。

Linux :

rygel----DLNA服務端,Debain Wheezy源裡的版本,因不支援mov、flv、rm、rmvb、mkv等格式的檔案分享,用過一段時間後放棄了

MiniDLNA(官網)----DLNA服務端,不支援rm、rmvb格式的檔案分享,但可以自己修改原始檔來支援,所以就選它了。它還自帶一個Web網頁,可以顯示分享資源數與當前客戶端名字等等,在瀏覽器裡開啟http://本機IP:8200


1、下載原始碼,目前minidlna最新版本1.2.1, 下載地址

sourceforge.net

2、修改原始檔

metadata.c

  1. //line 840
  2. elseif( strncmp(ctx->iformatctx->name, "matroska", 8) == 0 )  
  3.     xasprintf(&m.mime, "video/x-matroska");  
  4. elseif( strcmp(ctx->iformatctx->name, "flv") == 0 )  
  5.     xasprintf(&m.mime, "video/x-flv");  
  6. //----新增----
  7. elseif( strcmp(ctx->iformat->name, 
    "rm") == 0 )  
  8.     xasprintf(&m.mime, "video/x-pn-realvideo");  
  9. elseif( strcmp(ctx->iformat->name, "rmvb") == 0 )  
  10.     xasprintf(&m.mime, "video/x-pn-realvideo");  
  11. //---結束----
  12. if( m.mime )  
  13.     goto video_nodlna;  

upnpglobalvars.h
  1. // Line 169
  2.     "http-get:*:audio/mp4:*," \  
  3.     "http-get:*:audio/x-wav:*," \  
  4.     "http-get:*:audio/x-flac:*," \  
  5.     "http-get:*:application/ogg:*," \  
  6. //----add----
  7.     "http-get:*:video/x-pn-realvideo:*"
  8. //----end----
  9. #define DLNA_FLAG_DLNA_V1_5      0x00100000
  10. #define DLNA_FLAG_HTTP_STALLING  0x00200000

utils.c

  1. //line 381
  2.         ends_with(file, ".m2t") || ends_with(file, ".mkv")   ||  
  3.         ends_with(file, ".vob") || ends_with(file, ".ts")    ||  
  4.         ends_with(file, ".flv") || ends_with(file, ".xvid")  ||  
  5. //----add----
  6.         ends_with(file, ".rm")  || ends_with(file, ".rmvb")  ||  
  7. //----end----
  8. #ifdef TIVO_SUPPORT
  9.         ends_with(file, ".TiVo") ||  
  10. #endif
  11.         ends_with(file, ".mov") || ends_with(file, ".3gp"));  



3、編譯步驟
  1. sudo apt-get install build-essential libexif-dev libjpeg-dev \  
  2. libid3tag0-dev libFLAC-dev libvorbis-dev libsqlite3-dev libavformat-dev \  
  3. autoconf automake  
  4. ./autogen.sh  
  5. ./configure  
  6. make  
  7. make install  
  8. sudo cp ./linux/minidlna.inot.d.script.tmpl  /etc/init.d/minidlna  
  9. sudo cp ./minidlna.conf  /etc/minidlna.conf  
  10. # 第一次啟動使用-d –v選項看有沒有出錯  
  11. sudo /usr/local/sbin/minidlnad -d -v  
  12. # 沒出錯就ctrl+c 結束程序  
  13. # 正常啟動  
  14. sudo service minidlna start  
  15. # 重新整理列表  
  16. sudo service minidlna restart  

4. Minidlna配置

minidlna.conf

  1. # port for HTTP (descriptions, SOAP, media transfer) traffic  
  2. port=8200
  3. # network interfaces to serve, comma delimited  
  4. #network_interface=eth0
  5. # specify the user account name or uid to run as  
  6. #user=jmaggard
  7. # set this to the directory you want scanned.  
  8. # * if you want multiple directories, you can have multiple media_dirlines
  9. # * if you want to restrict a media_dir to specific content types, you  
  10. #   can prepend the types, followed by a comma, to the directory:  
  11. #   + "A" for audio  (eg. media_dir=A,/home/jmaggard/Music)  
  12. #   + "V" for video  (eg. media_dir=V,/home/jmaggard/Videos)  
  13. #   + "P" for images (eg. media_dir=P,/home/jmaggard/Pictures)  
  14. #   + "PV" for pictures and video (eg. media_dir=PV,/home/jmaggard/digital_camera)  
  15. media_dir=/opt  
  16. # set this to merge all media_dir base contents into the root container  
  17. # note: the default is no  
  18. #merge_media_dirs=no
  19. # set this if you want to customize the name that shows up on your clients  
  20. #friendly_name=My DLNA Server  
  21. # set this if you would like to specify the directory where you want MiniDLNA to store its database and album art cache  
  22. #db_dir=/var/cache/minidlna  
  23. # set this if you would like to specify the directory where you want MiniDLNA to store its log file  
  24. #log_dir=/var/log  
  25. # set this to change the verbosity of the information that is logged  
  26. # each section can use a different level: off, fatal, error, warn, info, or debug  
  27. #log_level=general,artwork,database,inotify,scanner,metadata,http,ssdp,tivo=warn
  28. # this should be a list of file names to check for when searching for album art  
  29. # note: names should be delimited with a forward slash ("/")  
  30. album_art_names=Cover.jpg/cover.jpg/AlbumArtSmall.jpg/albumartsmall.jpg/AlbumArt.jpg/albumart.jpg/Album.jpg/album.jpg/Folder.jpg/folder.jpg/Thumb.jpg/thumb.jpg  
  31. # set this to no to disable inotify monitoring to automatically discover new files  
  32. # note: the default is yes  
  33. inotify=yes
  34. # set this to yes to enable support for streaming .jpg and .mp3 files to a TiVo supporting HMO  
  35. enable_tivo=no
  36. # set this to strictly adhere to DLNA standards.  
  37. # * This will allow server-side downscaling of very large JPEG images,  
  38. #   which may hurt JPEG serving performance on (at least) Sony DLNA products.  
  39. strict_dlna=no
  40. # default presentation url is http address on port 80  
  41. #presentation_url=http://www.mylan/index.php  
  42. # notify interval in seconds. default is 895 seconds.  
  43. notify_interval=900
  44. # serial and model number the daemon will report to clients  
  45. # in its XML description  
  46. serial=12345678
  47. model_number=1
  48. # specify the path to the MiniSSDPd socket  
  49. #minissdpdsocket=/var/run/minissdpd.sock  
  50. # use different container as root of the tree  
  51. # possible values:  
  52. #   + "." - use standard container (this is the default)  
  53. #   + "B" - "Browse Directory"  
  54. #   + "M" - "Music"  
  55. #   + "V" - "Video"  
  56. #   + "P" - "Pictures"  
  57. #   + Or, you can specify the ObjectID of your desired root container (eg. 1$F for Music/Playlists)  
  58. # if you specify "B" and client device is audio-only then "Music/Folders" will be used as root  
  59. #root_container=.  
  60. # always force SortCriteria to this value, regardless of the SortCriteria passed by the client  
  61. #force_sort_criteria=+upnp:class,+upnp:originalTrackNumber,+dc:title  
  62. # maximum number of simultaneous connections  
  63. # note: many clients open several simultaneous connections while streaming  
  64. #max_connections=50

一般只需修改media_dir引數即可
  1. # V 即視訊  
  2. # 此目錄下只分享視訊檔案  
  3. media_dir=V,/home/aa/Videos  
  4. # P 即圖片  
  5. # A 即音樂  
  6. # 此目錄下分享圖片與音樂檔案  
  7. media_dir=PA,/home/aa/Public  


Debian版minidlna_1.1.4_x64_支援rmvb

注:編譯時Linux版本為Kali/Debian Wheezy x64

新增RMVB支援後的原始碼

minidlna_1.1.5_x64_支援rmvb

注:編譯時Linux版本為Kali 2.0 x64

sudo apt-get install build-essential libexif-dev libjpeg-dev \ libid3tag0-dev libFLAC-dev libvorbis-dev libsqlite3-dev libavformat-dev \ autoconf automake